pytorch常用函数,
perme中的参数是张量维数,不同的维数排列在不同的维数中得到一个新的张量。深度学习的主要功能是对特征值进行聚类。下面这篇文章主要介绍pytorch中perme()函数用法的相关信息,有需要的可以参考一下。
00-1010序三维态势变化1:任何参数变化无变化2: 1和2交换变化3: 0和1交换变化4: 0和2交换变化5: 0和1交换,1和2交换变化6: 0和1交换,0和2交换总结
目录
本文仅讨论2D和3D中置换的使用。
最近注意力研究中的一个置换函数我看不懂。
这个太抽象了,不好说。
我用代码和图片来解释。
首先,创建一个三维数组的小实例。
进口火炬
X=torch.linspace (1,30,steps=30)。view (3,2,5) #设置一个三维数组
打印(x)
检查数组的尺寸
这里为了防止相同维度值的重合(如三维数组(3,3,3)或(2,4,4)等。)
输出结果如下
一般来说,(3,2,5)解释为3维2行5列。这里很容易混淆。
那么我们按块、按行、按列来理解会更容易。
例如,(3,2,5)表示三个2*5的数组。
我就简单用三张3*3的图来偷懒作为例子。
然后堆积成我们所知的三维矩阵。
接下来,我们简单介绍一下permute()函数
置换(变暗)
参数dims由矩阵的维数代替,默认情况下一般从0开始。也就是第0维,第1维等等。
也可以理解为块0、块1等。当然,矩阵必须至少是二维的才能使用permute。
如果是二维的,dims分别为0和1。
可以写成permute(0,1)。这里没有变化,维度和之前一样。
如果写成permute(1,0),就是矩阵的转置。
如果三维是置换(0,1,2)0代表共有几块维度:在这种情况下,0对应于三个矩阵1代表每一块中有多少行;在这种情况下,1对应于两行2代表每一块中有多少列;2对应于每个矩阵的五列。
所以是一个三块两行五列的三维矩阵。
这些0,1,2没有任何实际意义,也不是数值,只是用来识别差异。有点类似于X,Y,Z来区分三个坐标维度,是人为规定的。
三维情况将直接用下面的代码解释。
前言
三维情况
B=x.permute(0,1,2) #不要改变尺寸
打印(b)
打印(b.size())
这时发现矩阵没有变化,还是像以前一样排列。
变化一:不改变任何参数
B=x.permute(0,2,1) #交换每个块的行和列,即转置每个块。
打印(b)
打印(b.size())
两张图可以对比一下。
在不改变每个块的前提下(即改变每个块的行和列(即二维矩阵的转置))。
变化二:1与2交换
B=x.permute(1,0,2) #交换块和行
打印(b)
校长
t(b.size())
两者比较可以看出块数和每块的行数发生了变化
即参数0对应的数值3块变成2块
参数1对应的2行变成3行
这个变化刚好是0与1 的位置交换,导致参数进行对调
此时变成了2块 * 3行 * 5列(初始为3块 * 2行 *5列)
变化四:0与2交换
b = x.permute(2,1,0) # 交换块和列print(b)
print(b.size())
此时参数0对应的3块经过permute已经变成了5块
参数2对应的5列已经变成了3列
变化五:0与1交换,1与2交换
b = x.permute(2,0,1) # 交换块和行和列print(b)
print(b.size())
此时参数0对应的3块变成了5块
参数1对应的2行变成了3行
参数2对应的5列变成了2列
变化六:0与1交换,0与2交换
b = x.permute(1,2,0) # 交换块和行和列print(b)
print(b.size())
此时参数0对应的3块变成了2块
参数1对应的2行变成了5行
参数2对应的5列变成了3列
总结
根据以上举得二维和三维例子可以知道permute()函数其实是对矩阵的块行列进行交换
里面的参数并不是具体数值
而是块行列的代指
写在最后
没想随手写的一篇居然这么多读者关注
我又在此篇文章的基础上,详细的解释了维度变化过程
能够更好的帮助大家理解permute函数的用法
进阶文章请戳我
到此这篇关于pytorch中permute()函数用法的文章就介绍到这了,更多相关pytorchpermute()函数用法内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。