https://zhuanlan.zhihu.com/p/31495102
>>> a=torch.randn(2,3)
>>> b=torch.cat((a,a),0)
>>> a
tensor([[-0.3728, -1.0802, 0.8086],
[ 0.1498, -1.1031, -0.5884]])
>>> b
tensor([[-0.3728, -1.0802, 0.8086],
[ 0.1498, -1.1031, -0.5884],
[-0.3728, -1.0802, 0.8086],
[ 0.1498, -1.1031, -0.5884]])
unsqueeze解压缩,维度增加
squeeze压缩,维度减少
>>> a.size()
torch.Size([3, 4])
>>> b=a.unsqueeze(0)
>>> b.size()
torch.Size([1, 3, 4])# 0维度增加一维
>>> c=a.squeeze(0)
>>> c.size()
torch.Size([3, 4])
>>> c=b.squeeze(0) # squeeze只能对于维度数目=1的维度压缩,否则无用
>>> c.size()
torch.Size([3, 4])
>>> c=c.squeeze(0)
>>> c.size()
torch.Size([3, 4])
3.torch.
chunk
(tensor, chunks, dim=0) → List of Tensors
chunk:切分成的chunk数目
dim:切分的维度
如果不够整个切分,例如4列切成3部分,upper(4/3)=2,会被切成2个2
torch.Tensor.expand()
torch.squeeze() torch.Tensor.repeat()
torch.Tensor.narrow() torch.Tensor.view()
torch.Tensor.resize_() torch.Tensor.permute()
torch.rand() 【0,1)抽取的随机数;
torch.randn() 标准正态分布,均值为0 ,方差为1的随机数
torch.arange(0,5)输出【0,1,2,3,4】
torch.range(0,5)输出【0,1,2,3,4,5】
标准 toch.arange(start, end, step)
model.chilren()和model.modules()输出不一样
modules不仅会输出model还会输出submodule
contiguous一般与transpose,permute,view搭配使用
即使用transpose或permute进行维度变换后,调用contiguous,然后方可使用view对维度进行变形。
有两种说法,一种是维度变换后tensor在内存中不再是连续存储的,而view操作要求连续存储,所以需要contiguous;
另一种是说维度变换后的变量是之前变量的浅复制,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的