pytorch中permute()函数用法补充说明(矩阵维度变化过程)

 更新时间:2022年04月27日 10:50:21   作者:ac不知深  
这篇文章主要给大家介绍了关于pytorch中permute()函数用法补充说明的相关资料,本文详细说明了permute函数里维度变化的详细过程,需要的朋友可以参考下

一、前言

之前写了篇torch中permute()函数用法文章,在详细的说一下permute函数里维度变化的详细过程

非常感谢@m0_46225327对本文案例更加细节补充

注意:

本文是这篇torch中permute()函数用法文章的补充内容

如果有精力可以把这篇文章阅读一下,能够更好的理解函数的维度变化过程

以及加深对输出结果的印象

二、举例解释

这里以比较经典的变化四做例子

先回顾一下变化四的内容:

————————————————分割线——————————————

变化四:0与2交换

b = x.permute(2,1,0)            # 交换块和列
print(b)
print(b.size())

此时参数0对应的3块经过permute已经变成了5块

参数2对应的5列已经变成了3列

————————————————分割线——————————————

解释部分

变化四中permute参数把(0,1,2)交换成了(2,1,0)

直观上看是直接把0和2两个位置直接交换

实际上两个参数交换包括了以下部分

维度变换重点

维度数值变换:(3,2,5)==>(3,5,2)==>(5,3,2)==>(5,2,3)
# 读者一定要考虑清楚下一行代表什么意思
函数中参数变换(0,1,2)==>(0,2,1)==>(1,0,2)==>(0,2,1)
# 第一个"==>" 变化为2和5交换,对应函数里的参数0不动,1和2交换 ,变换完后为(0,2,1),对应维度是(3,5,2)。重排序为(0,1,2)
# 第二个"==>" 变化为3和5交换,对应函数里的参数2不动,0和1交换,变换完后为(1,0,2),对应维度是(5,3,2)。重排序为(0,1,2)
# 第三个"==>" 变化为3和2交换,对应函数里的参数0不动,1和2交换,变换完后为(0,2,1),对应维度是(5,2,3)。重排序为(0,1,2)

或者看表格更容易理解些?

维度变换过程维度数值变换函数参数变换
(3,2,5)-(0,1,2)
(3,5,2)2和5(0,1,2)==> (0,2,1)
(5,3,2)3和5(0,1,2)==>(1,0,2)
(5,2,3)3和2(0,1,2)==>(0,2,1)

这里先给大家把代码放上来

便于大家验证理解

也可以先跳过代码部分直接看图片解释

import torch

x = torch.linspace(1,30,steps=30).view(3,2,5)
print('x:',x)
print(x.size())

# permute(0,1,2)==>permute(2,1,0)
# (3,2,5)==>(3,5,2)==>(5,3,2)==>(5,2,3)
#
# (0,1,2)==>(0,2,1)==>(1,0,2)==>(0,2,1)

b1 = x.permute(0,2,1)
print('b1:',b1)
print(b1.size())

b2 = b1.permute(2,0,1)
print('b2:',b2)
print(b2.size())

b = b2.permute(2,1,0)
print('b:',b)
print(b1.size())

1、permute(0,1,2)

这部分就是(3,2,5)矩阵中原有的样子

2、permute(0,1,2) ⇒ permute(0,2,1)

这部分是把3块中的每一块矩阵进行转置操作,即行和列的交换

2行3列==>3行2列

3、permute(0,2,1) ⇒ permute(1,0,2)

这部分是列不动,把块和行交换

把第一块的五行分别写入变换后的五块中第一行

把第二块的五行分别写入变换后的五块中第二行

把第三块的五行分别写入变换后的五块中第三行

4、permute(1,0,2) ⇒ permute(0,2,1)

最后行列交换,即转置

三、写在最后

如果大家看起来还是比较难理解些

建议可以手写一下这个转换例子,真的一下就懂了

以下是我手写矩阵转化过程

到此这篇关于pytorch中permute()函数用法补充说明的文章就介绍到这了,更多相关pytorch permute()函数用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 将字符串转换成字典dict

    python 将字符串转换成字典dict

    将字符串转化成字典dict类型?这个可以用python的标准库simplejson 转换为JSON格式。
    2013-03-03
  • Python中的探索性数据分析(功能式)

    Python中的探索性数据分析(功能式)

    这篇文章主要介绍了功能式Python中的探索性数据分析的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-12-12
  • Python的bit_length函数来二进制的位数方法

    Python的bit_length函数来二进制的位数方法

    今天小编就为大家分享一篇Python的bit_length函数来二进制的位数方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 在PyCharm中使用FMEObjects的操作步骤

    在PyCharm中使用FMEObjects的操作步骤

    这篇文章主要介绍了在PyCharm中使用FMEObjects,本文将ArcGISPro2.8的Python3.7解释器与FME2022.0配合使用,通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Python单元测试实例详解

    Python单元测试实例详解

    这篇文章主要介绍了Python单元测试,结合实例形式详细分析了Python单元测试模块的功能、使用方法及相关操作注意事项,需要的朋友可以参考下
    2018-05-05
  • Python操作Excel的10个必学脚本分享

    Python操作Excel的10个必学脚本分享

    Excel表格操作是我们日常工作中不可或缺的一部分,而Python凭借其强大的数据处理能力,可以极大地提升我们操作Excel的效率,本文将介绍10个必学的Python脚本,需要的可以零基础
    2025-03-03
  • 一文带你了解Python中的双下方法

    一文带你了解Python中的双下方法

    Python中有一些特殊方法的方法名都是以双下划线开始和结束,所以又被称为双下方法。本文就来为大家详细讲讲Python中的双下方法的使用,感兴趣的可以了解一下
    2022-07-07
  • Python语言在AI中的常用工具和应用场景

    Python语言在AI中的常用工具和应用场景

    文章探讨了TensorFlow、PyTorch和Keras等流行的深度学习框架,以及Scikit-learn等用于机器学习的库,文章还举例说明了AI在自然语言处理、图像识别、语音识别和推荐系统等领域的实际应用场景,并介绍了如何使用Python调用AI大模型的接口
    2025-02-02
  • python找出一个列表中相同元素的多个索引实例

    python找出一个列表中相同元素的多个索引实例

    今天小编就为大家分享一篇python找出一个列表中相同元素的多个索引实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python中自定义异常/raise关键字抛出异常的案例解析

    python中自定义异常/raise关键字抛出异常的案例解析

    在编程过程中合理的使用异常可以使得程序正常的执行,本篇文章给大家介绍python中自定义异常/raise关键字抛出异常案例解析,需要的朋友可以参考下
    2024-01-01

最新评论