目录
- 一、前言
- 二、举例解释
-
- 解释部分
- 1、permute(0,1,2)
- 2、permute(0,1,2) ? permute(0,2,1)
- 3、permute(0,2,1) ? permute(1,0,2)
- 4、permute(1,0,2) ? permute(0,2,1)
- 三、写在最后
一、前言 之前写了篇torch中permute()函数用法文章,没想到收藏和点赞还挺多的
那我就在详细的说一下permute函数里维度变化的详细过程
注意:
本文是这篇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)==>(3,5,2)==>(5,2,3)
# 读者一定要考虑清楚下一行代表什么意思
函数中参数变换(0,1,2)==>(0,2,1)==>(1,0,2)==>(0,2,1)
# 第一个"==>" 变化为2和5交换,对应函数里的参数为1和2交换
# 第二个"==>" 变化为3和5交换,对应函数里的参数为0和1交换
# 第三个"==>" 变化为3和2交换,对应函数里的参数为1和2交换
或者看表格更容易理解些?
维度变换过程 | 维度数值变换 | 函数参数变换 |
---|---|---|
(3,2,5) | - | (0,1,2) |
(3,5,2) | 2和5 | (0,2,1) |
(5,3,2) | 3和5 | (1,0,2) |
(5,2,3) | 3和2 | (0,2,1) |
便于大家验证理解
也可以先跳过代码部分直接看图片解释
import torchx = 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)
文章图片
最后行列交换,即转置
三、写在最后 如果大家看起来还是比较难理解些
建议可以手写一下这个转换例子,真的一下就懂了
以下是我手写矩阵转化过程
【NLP|torch中permute()函数用法补充内容(矩阵维度变化详细过程)】
文章图片
推荐阅读
- Python知识点系列详解|Python网站开发必备-django模板自定义标签
- Python实战项目|Python技术知识获取数据并进行可视化(已火锅店为例)
- 宝藏推荐|容易让人没朋友的python整蛊小程序,纯属娱乐慎用
- Python 读取PDF文件为文本字符并转换为音频
- Python字典常见操作方法 - 增加、删除、修改
- Python字典查找数据的5个操作方法有哪些()
- Python|Python函数式编程学习(lambda, map, reduce, filter)
- 机器学习|机器学习入门(开发环境搭建)
- asyncio|asyncio 多线程附加协程,在一个线程内运行一个事件循环