torch中permute()函数的结果怎么从原张量来的

一、前言

        每当用到这个函数,知道是重新排列张量的,但是结果中的值和原张量是怎么对应来的,我根据个人理解做了一个梳理,主要是permute的结果与原张量的对应关系,我没有找到合适的讲解,大多文章讲解的3维度的张量还好理解,但是4维度或者更高维度的,头脑里就想象不到了。如果哪里有错还请大家指出来。

permute的用用法我就不介绍了,有很多介绍。

二、上菜

        首先明确张量形状,比如一个形状为(4,5,6,7) 的4维张量,它的形状是什么?

        这里从后向前看,按7,6,5,4的顺序来看:

        1.首先是一个7个元素的向量,然后有6个这样的7元素向量,形成6*7的矩阵;

        2.接着是5,表示有5个6*7大小的矩阵,堆成一个块;

        3.最后是4,表示有4个5*6*7大小的块。

        这是我理解下的这个4维张量的形状。

再来看下permute操作。

我自己先定义两个概念,维度方向和填满,便于后面理解permute怎么从元张量中取值。

比如X是形状为(2,2,4,4)的张量,有4个维度,编号为0,1,2,3,如下图,箭头示意每个维度的取值方向。

 

 0维下有2个2x4x4的元素,每个元素下有2个4x4的矩阵,形成了(2,2,4,4)的张量。

现在做permute变换,X.permute(3,1,0,2),结果是一个(4,2,2,4)的张量。

先将这两组数字对齐。

perute参数: 3, 1, 0, 2

结果形状:       4, 2, 2, 4

填满的意思是,从原张量中取值填满结果中最后一维。

  1. 最后一维4,但是从原张量的哪里取值呢?看permute参数对应的最后一个2,表示从原张量的第2维的方向去取值来填,但是对0维度来说,第2维度是在其下面两个2x2x4的元素里面,那就按默认的顺序。

    这里取 [2,0,7,4]

  2. 从结果形状向前看是2, 表示有2个4长度的向量,前面已经有一个了[2,0,7,4]了,另一个去哪取?看对应位置的permute参数是0,表示去原张量的第0维去取,对0维来说,它下面只有两个元素,即2个2x2x4,[2,0,7,4]已经是在其中一个2x2x4里面取得了,那就从另一个元素里取。

    这里取[2,5,0,3],现在形成了[[2,0,7,4],[2,5,0,3]]

  3. 从结果形状向前看是2,表示有2个2x4的矩阵,前面有一个[[2,0,7,4],[2,5,0,3]]的2x4矩阵了,另一个去哪取?看对应的permute参数是1,表示去原张量的第1维度去取。已经有一个2x4的矩阵是在第一个第1维的4x4的子元素里取了一个[2,0,7,4],那就在第一个第1维元素里取另外一个4x4的子元素里取

这里取[8,7,0,6],同步骤2中逻辑,2x4的另一个4元素向量取[3,2,0,2],这里就形成[[8,7,0,6],[3,2,0,2]]

和步骤2中的[[2,0,7,4],[2,5,0,3]]组成[[[2,0,7,4],[2,5,0,3]],[[8,7,0,6],[3,2,0,2]]]

  1. 从结果形状向前看是4,表示有4个2x2x4的立方体,前面已经有1个2x2x4的立方体了,另外4个怎么取?看对应的permute参数是3,表示按第3维的方向去重复执行以上操作。前面已经有一个了,所有接下来的一个2x2x4的元素是

    第2个:[[[0,2,1,5],[8,4,2,8]],[[8,8,5,8],[7,1,0,0]]]

    第4个:[[[6,4,6,6],[6,5,1,4]],[[4,4,1,7],[8,3,5,5]]]

对比permute结果:

 

同样逻辑,X.permute(2,3,1,0),结果是一个(4,4,2,2)形状的张量。第一个4x2x2元素是:

[[[2,2],[8,3]],[[0,8,],[8,7]],[[6,7],[7,4]],[[6,6],[4,8]]]

 要是你有兴趣的,可以验证下更高维度的对应关系是不是这样。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值