如何理解permute函数的用法,三维矩阵怎样应用
Admin 2022-10-31 群英技术资讯 1338 次浏览
这篇文章给大家介绍了“如何理解permute函数的用法,三维矩阵怎样应用”的相关知识,讲解详细,步骤过程清晰,有一定的借鉴学习价值,因此分享给大家做个参考,感兴趣的朋友接下来一起跟随小编看看吧。本文只讨论二维三维中的permute用法
最近的Attention学习中的一个permute函数让我不理解
这个光说太抽象
我就结合代码与图片解释一下
首先创建一个三维数组小实例
import torch x = torch.linspace(1, 30, steps=30).view(3,2,5) # 设置一个三维数组 print(x) print(x.size()) # 查看数组的维数
这里为了防止出现维数数值相同的巧合局面(例如三维数组(3,3,3)或者(2,4,4)等)
输出结果如下图

一般的把(3,2,5)解释为3维2行5列这里很容易让人迷迷糊糊
那么我们按照块,行,列理解起来会更容易一些
比如(3,2,5),表示3块 2*5的数组
以下我简单用3块3*3图偷懒举例

然后堆起来就是我们熟知的三维矩阵

接下来先简单介绍下permute()函数
permute(dims)
参数dims用矩阵的维数代入,一般默认从0开始。即第0维,第1维等等
也可以理解为,第0块,第1块等等。当然矩阵最少是两维才能使用permute
如是两维,dims分别为是0和1
可以写成permute(0,1)这里不做任何变化,维数与之前相同
如果写成permute(1,0)得到的就是矩阵的转置
如果三维是permute(0,1,2)
0代表共有几块维度:本例中0对应着3块矩阵
1代表每一块中有多少行:本例中1对应着每块有2行
2代表每一块中有多少列:本例中2对应着每块有5列
所以是3块2行5列的三维矩阵
这些0,1,2并没有任何实际的意义,也不是数值,只是用来标识区别。有点类似于x,y,z来区分三个坐标维度,是人为规定好的
三维情况直接用下面的代码来给大家讲解
b = x.permute(0,1,2) # 不改变维度 print(b) print(b.size())

发现此时矩阵没有变化,依然是按照之前的方式排列
b = x.permute(0,2,1) # 每一块的行与列进行交换,即每一块做转置行为 print(b) print(b.size())


两张图片可以比较
在不改变每一块(即)的前提下,对每一块的行列进行对调(即二维矩阵的转置)
b = x.permute(1,0,2) # 交换块和行 print(b) print(b.size())


两者比较可以看出块数和每块的行数发生了变化
即参数0对应的数值3块变成2块
参数1对应的2行变成3行
这个变化刚好是0与1 的位置交换,导致参数进行对调
此时变成了2块 * 3行 * 5列(初始为3块 * 2行 *5列)
b = x.permute(2,1,0) # 交换块和列 print(b) print(b.size())


此时参数0对应的3块经过permute已经变成了5块
参数2对应的5列已经变成了3列
b = x.permute(2,0,1) # 交换块和行和列 print(b) print(b.size())


此时参数0对应的3块变成了5块
参数1对应的2行变成了3行
参数2对应的5列变成了2列
b = x.permute(1,2,0) # 交换块和行和列 print(b) print(b.size())


此时参数0对应的3块变成了2块
参数1对应的2行变成了5行
参数2对应的5列变成了3列
根据以上举得二维和三维例子可以知道permute()函数其实是对矩阵的块行列进行交换,里面的参数并不是具体数值,而是块行列的代指
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本篇文章给大家带来了关于Python的相关知识,Django是比较经典的Python web框架,最近刚好在项目中用到了Django,所以下面这篇文章主要给大家介绍了关于使用Pycharm创建一个Django项目的超详细图文教程,希望对大家有帮助。
这篇文章主要介绍了Python 中的pass语句语法详析,pass是一种空操作(null operation),解释器执行到它的时候,除了检查语法是否合法,什么也不做就直接跳过
Linux/Unix 的系统上,Python 解释器通常被安装在 /usr/local/python3 这样的有效路径(目录)里。
这篇文章主要介绍了pycharm debug 断点调试心得分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
在训练yolo网络检测目标时,需要根据待检测目标的位置大小分布情况对anchor进行调整,使其检测效果尽可能提高,下面这篇文章主要给大家介绍了关于YOLOv5目标检测之anchor设定的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008