维度变换:
View/reshape:
a.shape = [4,1,28,28]
a.reshape(4,28*28).shape() = [4,784]
a.reshape(4*28,28).shape() = [112,28]
Squeeze 挤压, unsqueeze 展开
a.shape() = [4,1,28,28]
a.unsqueeze(index).shape() index为插入完成后的索引编号
a.unsqueeze(0).shape() = [1,4,1,28,28]
a.unsqueeze(4).shape() = [4,1,28,28,1]
维度删减
a.squeeze(index) index为0, 删除所有维度为1的数据
a.squeeze(1).shape() = [4,28,28]
Expand/repeat 针对维度为1的地方进行扩张
a.shape() = [1,32,1,1]
a.expand(4,32,14,14).shape() = [4,32,14,14]
a.expand(-1,32,-1,-1).shape() = [1,32,1,1] -1代表维持不变
a.repeat(4,1,1,1).shape() = [4,32,1,1] repeat是原有的维度与给定次数相乘的结果
矩阵维度交换操作:
a.shape() = [4,3,32,32]
a.transpose(1,3) 交换1,3维度 两两交换
a.contiguous() 内存空间数据变为连续
a.permute(0,2,3,1) 一次交换结束 [4,28,32,3]