PyTorch升维和降维

降维官方文档
升维官方文档

直接翻译吧,看了几篇博客,不是很清晰。

降维

torch.squeeze(input, dim=None)->Tensor

input:输入张量数据
dim:默认为None,如果不指定值,会删除input所有维度为1的数据,如input shape(A*1*B*C*1*D)–>(A*B*C);再或者,我们指定维度,注意,这里的指定是通过shape的索引来指定,那么如果索引指定的维度为1则进行降维,非1则不降。

例子

import torch
a = torch.zeros(2, 1, 2, 1, 2)
a.size() # torch.Size([2, 1, 2, 1, 2])
b = torch.squeeze(a) 
b.size() # torch.Size([2, 2, 2])
c = torch.squeeze(a, 0)
c.size() # torch.Size([2, 1, 2, 1, 2]), 不需要降维
d = torch.squeeze(a, 3)
d.size() # torch.Size([2, 1, 2, 2])

note

input tensor 和 return tensor 会共享内存,因此修改其中一个,另外一个也会变,原因就是,他们都是storage 的 view,至于为什么,请参考该链接。

# 验证:
id(a.storage()) == id(b.storage) # True

warning

如果input tensor 有一个为1的batch size,torch.squeeze(input) 也会清除 batch 维度,所以,要小心哦。

升维

升且只升1维。

torch.unsqueeze(input, dim) --> Tensor

返回一个在特定位置增维后的new tensor,依然 share storage。
dim参数范围:[-input.dim() - 1, input.dim()],如果dim是负的,则 dim = dim + input.dim() + 1.

参数解释

input(Tensor) - 输入的tensor
dim(int) - 扩增维度的索引位置

例子

# torch.unsqueeze(input, dim)
ac = torch.tensor([[1, 2], [3, 4]])
ac.dim() # 2
# dim is in [-3, 2],即-3、-2、-1、0、1、2
torch.unsqueeze(ac, 0).shape # 1, 2, 2
torch.unsqueeze(ac, 1).shape # 2, 1, 2
torch.unsqueeze(ac, 2).shape # 2, 2, 1
# -3, -2, -1 与 0, 1, 2 功能相同

你可能感兴趣的:(PyTorch,学习,pytorch,python,深度学习)