Pytorch张量函数记录
- 本文链接:
- 本文目的:主要包含
torch.xxx
各类函数,这些函数主要用于对torch.Tensor
进行操作。 - 当前版本:
Pytorch 1.0.0
- 需注意的是:本文不包含所有的函数,那和
Api doc
差别不大。仅包含所有的个人使用频繁的函数,但本人不怎么实用的函数,每类也会简单记录一下,给下次需要时提供。
本文目录
- Pytorch张量函数记录
- 1. 张量创建
- 1.1 已有其他类型数据创建
- 1.2 直接创建
- 2. 张量选取
- 3. 张量拼接和切分
- 3.1 `torch.cat()`
- 3.2 `torch.stack()`
- 4. 张量形状变换
- `torch.norm()`
1. 张量创建
1.1 已有其他类型数据创建
介绍:如果你有array_like
类型的数据(包括list, tuple, ndarray, sclar等),可通过这些方法转换为Tensor
对象。
-
torch.tensor(data)
深拷贝data
中的数据,创建一个新的Tensor
。 -
torch.from_numpy(ndarray)
与传入的ndarray
共享内存,即,新Tensor
和输入的ndarray
,谁发生改动,都会对共享的数据产生影响。 -
torch.as_tensor(data
考虑输入的data
是否为Tensor
,而决定是深拷贝还是浅拷贝。
1.2 直接创建
介绍:以torch
提供的模板进行Tensor
的创建。
-
torch.zeros(*sizes)
创建全0张量 -
torch.zeros_like(input)
创建与input
形状相同的全0张量 -
torch.ones(*sizes)
创建全1张量 -
torch.arange(start=0, end, step=1)
创建从start
以step
的步伐增长到end-1
的张量 -
torch.eye(n)
创建对角线全为1,其余为0的n*n
矩阵Tensor
-
torch.full(size, fill_value)
创建全为fill_value
的Tensor
- 随机创建,见随机采样部分
注意:其中,一般使用sizes
来表示形状。*sizes
一般是支持一串数字,或者是list和tuple这样的集合对象。而size
呢,则需要考虑后面的参数,防止误读,只能传入list或tuple对象。
2. 张量选取
-
torch.index_select(input, dim, index)
在指定维度上,根据索引来选择元素,返回新的Tensor
。 -
torch.masked_select(input, mask)
传入原Tensor
和相同形状的maskTensor
,使用mask来选择元素。 -
torch.nonzero(input)
返回所有不为0元素的索引。注意,返回的Tenosr不是选取的数据,而是索引。 torch.where(condition, x, y)
3. 张量拼接和切分
这一部分的形式与上面有一些不同,会添加示例进行细致的讲解。
-
torch.cat(tensors, dim=0)
:在已有维度上拼接两个Tensor
。【有示例】 -
torch.stack(seq, dim)
:创建新的维度,并在新的维度上堆叠两个Tensor
。【有示例】 -
torch.split(tensor, split_size_or_sections, dim=0)
在指定维度上,对Tensor
进行切分。
3.1 torch.cat()
介绍:在已有维度上拼接两个Tensor
。
完整函数:torch.cat(tensors, dim=0, out=None) → Tensor
参数:
- tensors (sequence of Tensors) –
Tensor
序列,可以由list或tuple组装。注意,除了dim维度,所有tensors在其他维度上应该形状相同 - dim (int, optional) – 拼接维度。
>>> x = torch.randn(2, 3)
>>> x
tensor([[ 0.6580, -1.0969, -0.4614],
[-0.1034, -0.5790, 0.1497]])
>>> torch.cat((x, x, x), 0)
tensor([[ 0.6580, -1.0969, -0.4614],
[-0.1034, -0.5790, 0.1497],
[ 0.6580, -1.0969, -0.4614],
[-0.1034, -0.5790, 0.1497],
[ 0.6580, -1.0969, -0.4614],
[-0.1034, -0.5790, 0.1497]])
3.2 torch.stack()
介绍:创建新的维度,并在新的维度上堆叠两个Tensor
。
完整函数:torch.stack(seq, dim=0, out=None) → Tensor
参数:
- seq (sequence of Tensors) –
Tensor
序列,可以由list或tuple组装。注意,所有Tensor形状需要相同 - dim (int, optional) – 新设置的维度位置,若为0,则在第0个维度前插入维度作为堆叠的维度。
>>> x = torch.arange(6).view(2,3)
>>> x
tensor([[0, 1, 2],
[3, 4, 5]])
>>> torch.stack([x,x], 0)
tensor([[[0, 1, 2],
[3, 4, 5]],
[[0, 1, 2],
[3, 4, 5]]])
>>> torch.stack([x,x], 0).size()
torch.Size([2, 2, 3])
4. 张量形状变换
torch.reshape(input, shape)
torch.transpose(input, dim0, dim1)
torch.t(input)
torch.squeeze(input, dim)
torch.unsqueeze(input, dim)
torch.norm()
torch.norm(input, p, dim, out=None) → Tensor
介绍:用于计算Tensor的p范数
参数:
- input (Tensor) – 输入张量
- p (int, float, inf, -inf, ‘fro’, ‘nuc’, optional) – 范数计算中的幂指数值或字符串
>>> import torch
>>> a = torch.arange(3, dtype= torch.float)
>>> torch.norm(a)
tensor(2.2361)
参考
- Pytorch官方文档