------------恢复内容开始------------
概括:
一. view/reshape
作用几乎一模一样,保证size不变:意思就是各维度相乘之积相等(numel()),且具有物理意义,别瞎变,要不然破坏数据污染数据;
数据的存储、维度顺序非常重要,需要时刻记住
size没有保持固定住,报错
二。 Squeeze与unsqueeze
unsqueeze:正索引在之前插入,负索引在之后插入;
Squeeze:
1.Dim中size=1的都被挤压,数据本身没变
2.挤压具体维度的数据,且squeeze(x),x是dim的索引,x既接受正的索引,也接受负的索引。如果这个索引对应的维度是1,则会减少挤压这个维度,如果维度不是1,不会改变。
Expand:不会主动的复制数据,有需要的时候复制数据,否则省略掉复制过程,占用内存小,推荐使用。
repeat:复制内容,1--》4维,实实在在扩展数据
最终效果完全一样。
enpend: 维度(1,32,1,1)-->扩展成(4,32,14,14)必须是Dimention一致(都是四维),都是1--》N(4),不能是3—》N这种;
如果固定某一维度,不扩展,那就可以写成-1,表示固定这个维度不变。
Repeate(x,y,z,m),这其中的参数不像expand那样给的维度,它是拷贝的次数。------每个维度要重复的次数;不建议使用repeat函数,因为会把memory改掉,会重现申请内存空间,占用内存压力变大。
.t()---转置函数:注意只能使用在2D(二维)数据上,3D,4D不能直接使用
Transpose--维度转换函数:1,3维度转换位置,[b,c,h,w]-->[b,w,h,c],这时可能造成数据不连续了,需要先连续一下(contiguous()),但注意view()会导致维度顺序关系变得模糊,造成数据信息丢失,需要人为跟踪,所以【87】是错的。通过torch.all(torch.eq(a,b))判断a,b是不是每个元素完全一样。
permute()函数:相当于transpose的加强版,transpose是两两交换,(b,c,h,w)-->(b,w,c,h),只需要将对应的索引放到要转换的位置上就好了,permute(0,3,1,2)——此例与最后的实例不同,就是介绍这个原理。注意如果出现不连续问题,就要使用contiguous(),(内存重新开辟空间,重新复制,重新整理)。
------------恢复内容结束------------
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pytorch之维度变化view/reshape;squeeze/unsqueeze;Transpose/permute;Expand/repeat - Python技术站