4:张量操作

 1:view reshape合并维度

 【注】:合并维度。若:x=torch.randn(4,4)。x.view(-1,8)其中的-1为自动计算剩余维度的大小即为2。x.view(-1)其中的-1表示拉直张量。

2:unsqueeze()插入维度/squeeze()删除维度

 【注】当参数为正数是在前面插入,为负数时在后面插入。当一个tensor为4个维度时,可插入范围为[-5,5):

如果需要在最后一个维度之后插入一个维度可以用unqueeze(4)也可以用unqueeze(-1);

如果需要在最前面插入一个维度可以用unqueeze(0)也可以用unqueeze(-5).

[注]unqueeze(5)会报错。

 

 【注】当不给参数(维度的索引)时,删除所有size为1的维度。

【注】只能删除size为1的维度

3:expand/repeat维度扩展

 [注]维度扩展只能扩展size为1的维度,当expand()中某一维度的参数为-1时表明该维度不进行扩展,主要用于某一维度的size需要计算才能得到,故可以用-1表示该维度不进行扩展。

 [注]不推荐使用repeat会增加使用的内存

4:t()/transpose()/permute()维度交换

 [注]在维度变化之后(转置),会导致数据不连续,故需要用contiguous()将数据连续起来。

view()展开时应该根据合并之前的维度size展开

 【注】permute()函数的参数为原来维度的索引,可以一次实现多次维度交换,由于交换之后被打乱故也需要用contiguous()连续起来。

 5:打平层(网络层):Flatten()该层是自定义的一个网络层,pytorch中没有提供实现的类

 【注】pytorch中未提供这个打平,需要自己定义。以上我已经定义好,大家可以在后面网络构建时使用。

原文地址:https://www.cnblogs.com/jiafeng1996/p/14989797.html