squeeze(input, dim=None, out=None)
函数详解:核心功能:
这个函数主要对数据的维度进行压缩,去掉维数为1的的维度。比如:是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。b=torch.squeeze(a,N) 就是将a中所有为1的维度删掉,不为1的维度没有影响。
参数说明:
dim
的取值范围为:[-input.dim(), input.dim()-1] 。x = torch.zeros(2, 1, 2, 1, 2)
print(x.size())
>>> torch.Size([2, 1, 2, 1, 2])
y = torch.squeeze(x)
print(y.size())
>>> torch.Size([2, 2, 2])
# 如果第一个维度为一,则将其进行压缩;否则,不能压缩
y = torch.squeeze(x, 0) # 或者 y = torch.squeeze(x, dim=0)
print(y.size())
>>> torch.Size([2, 1, 2, 1, 2])
# 如果第二个维度为一,则将其进行压缩
y = torch.squeeze(x, 1) # 或者 y = torch.squeeze(x, dim=1)
print(y.size())
>>> torch.Size([2, 2, 1, 2])
# 如果第三个维度为一,则将其进行压缩;否则,不能压缩
y = torch.squeeze(x, 2) # 或者 y = torch.squeeze(x, dim=2)
print(y.size())
>>> torch.Size([2, 1, 2, 1, 2])
# 如果第四个维度为一,则将其进行压缩
y = torch.squeeze(x, dim=3) # 或者 y = torch.squeeze(x, dim=3)
print(y.size())
torch.Size([2, 1, 2, 2])
# 如果第五个维度为一,则将其进行压缩
y = torch.squeeze(x, dim=4) # 或者 y = torch.squeeze(x, dim=4)
print(y.size())
torch.Size([2, 1, 2, 1, 2])
out (Tensor, optional): 输出张量(the output tensor.)
unsqueeze(input, dim)
函数详解:
核心功能:
在tensor的某个维度上添加一个维数为1的维度,这个功能用view()
函数也可以实现。比如:原本有个三行的数据(3),在0的位置加了一维就变成一行三列(1,3)。a.unsqueeze(N) 就是在a中指定位置N加上一个维数为1的维度。还有一种形式就是b=torch.unsqueeze(a,N) a就是在a中指定位置N加上一个维数为1的维度。这一功能尤其在神经网络输入单个样本时很有用,由于pytorch神经网络要求的输入都是mini-batch型的,维度为[batch_size, channels, w, h]
,而一个样本的维度为[c, w, h],此时用unsqueeze()增加一个维度变为[1, c, w, h]就很方便了。
参数说明:
dim
的取值范围为:[-input.dim() - 1, input.dim() + 1)备注: 以0为分界,正向取值和反向取值的效果相同,其原理类似DataFrame中的正向、反向切片操作。正向取值时,0表示行,1表示列;反向取值时,-1表示列,-2表示行。
\quad
例如:若input。dim()==1,此时,dim的取值范围为[-2,2),正向取值时——dim=0(表示:行维度为1,即:新生成Tensor的shape为 torch.Size([1, 100]) );dim=1(表示:列维度为1,即:新生成Tensor的shape为 torch.Size([100, 1]) ))。反向取值时——dim=-2(表示:行维度为1,即:新生成Tensor的shape为 torch.Size([1, 100]) );dim=-1(表示:列维度为1,即:新生成Tensor的shape为 torch.Size([100, 1]) )
a = torch.linspace(-1, 1, 100) # 生成-1到1的100个数构成的等差数列
print(a.shape)
>>> torch.Size([100])
x = torch.unsqueeze(torch.linspace(-1, 1, 100), dim=1) # dim=1,表示列方向维度为1
print(x.shape)
>>> torch.Size([100, 1])
x = torch.tensor([1, 2, 3, 4])
torch.unsqueeze(x, 0)
>>> tensor([[ 1, 2, 3, 4]])
torch.unsqueeze(x, 1)
>>> tensor([[ 1],
[ 2],
[ 3],
[ 4]])
x = torch.zeros(2, 2, 2)
print(x.shape)
>>> torch.Size([2, 2, 2])
# 在input的第三个维度上扩充维度1
y = torch.unsqueeze(x, dim=2)
print(y.shape)
>>> torch.Size([2, 2, 1, 2])
注意事项:squeeze(input, dim=None, out=None)
和unsqueeze(input, dim)
中的参数dim含义相同,均代表在input
的第dim
个位置维度处进行维度1的压缩或扩充。
torch.linspace(start, end, steps=100, out=None)
函数详解:
核心功能:
返回一个1维张量,包含在区间start和end上均匀间隔的step个点。输出张量的长度由steps决定。
参数说明:
#生成0到10的4个数构成的等差数列
a = torch.linspace(0,10,steps=4)
print(a)
>>>
tensor([ 0.0000, 3.3333, 6.6667, 10.0000])
#生成0到10的5个数构成的等差数列
b = torch.linspace(0,10,steps=5)
print(b)
>>>
tensor([ 0.0000, 2.5000, 5.0000, 7.5000, 10.0000])
torch.randn(*sizes, out=None)
函数详解:
核心功能:
返回一个张量Tensor,包含了从 标准正态分布(均值为0,方差为1 ——即:高斯白噪声) 中抽取的一组随机数。张量的形状由参数sizes定义。
参数说明:
zeros(*size, out=None, dtype=None, layout=torch.strided, device=None, requires_grad=False) -> Tensor
函数详解:
核心功能:
返回一个形状为为size,类型为torch.dtype,里面的每一个值都是0的tensor
典型范例:
torch.zeros(2, 3) # 生成维度为2*3的由0元素组成的张量
>>>
tensor([[ 0., 0., 0.],
[ 0., 0., 0.]])
torch.zeros(5) # 生成维度为1的5个0元素组成的张量
>>>
tensor([ 0., 0., 0., 0., 0.])
torch.zeros(2, 2, 2) # 生成维度为2*2*2的由0元素组成的张量
>>>
tensor([[[0., 0.],
[0., 0.]],
[[0., 0.],
[0., 0.]]])
torch.empty
(*sizes, out=None, dtype=None, layout=torch.strided,
device=None, requires_grad=False, pin_memory=False) → Tensor
Returns a tensor filled with uninitialized data. The shape of the tensor is defined by the variable argument sizes.
返回填充有未初始化数据的张量。 张量的形状由可变的参数大小定义。
参数说明:
只需要调用torch.manual_seed(seed)
,它将随机数生成器的种子设置为固定值,这样,当调用时torch.rand(2),结果将可重现。
torch.manual_seed(1) # reproducible
print(torch.rand(2)) # 运行多次,得到的随机值是固定的,但如果没有torch.manual_seed(1) ,则结果每次都不同
>>>
tensor([0.7576, 0.2793])
参考链接:python—pytorch-torch.manual_seed(1)的作用
torch.mm(a, b)
是矩阵a和b矩阵相乘
norm(X)
如果x是一个向量,那么norm(x)就等于x的模长
torch.ones_like
(input, dtype=None, layout=None, device=None, requires_grad=False) → Tensor,返回一个填充了标量值1的张量,其大小与之相同 input。torch.ones_like(input)
等价于 torch.ones(input.size(), dtype=input.dtype, layout=input.layout, device=input.device)