pytorch张量纬度变化

https://zhuanlan.zhihu.com/p/31495102

1.拼接

torch.cat()

>>> 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]])

2.squeeze & unsqueeze

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(tensorchunksdim=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

 

unfold()

pytorch张量纬度变化_第1张图片

contiguous

contiguous一般与transpose,permute,view搭配使用

即使用transpose或permute进行维度变换后,调用contiguous,然后方可使用view对维度进行变形。

有两种说法,一种是维度变换后tensor在内存中不再是连续存储的,而view操作要求连续存储,所以需要contiguous;

另一种是说维度变换后的变量是之前变量的浅复制,指向同一区域,即view操作会连带原来的变量一同变形,这是不合法的

 

你可能感兴趣的:(深度学习基础知识)