zoukankan      html  css  js  c++  java
  • pytorch之维度变化view/reshape;squeeze/unsqueeze;Transpose/permute;Expand/repeat

    ------------恢复内容开始------------

    概括:

     一. 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(),(内存重新开辟空间,重新复制,重新整理)。

    ------------恢复内容结束------------

  • 相关阅读:
    SDOI 2016 数字配对
    SDOI 2016 征途 决策单调性
    SDOI 2016 生成魔咒
    SDOI 2016 排列计数
    【SC主题公园杯】三个袋子 = =不动脑的后果
    【BZOJ3050】【USACO 2013 Jan Gold金组】坐座位 Seating
    MillerRabin 快速的素数概率判定法
    [POJ3189][cqbzoj1640]稳定的奶牛分配 解题报告
    最大流 isap 模板
    【POJ 1324】Holedox Moving A*宽搜
  • 原文地址:https://www.cnblogs.com/kevin-red-heart/p/12774489.html
Copyright © 2011-2022 走看看