基于PyTorch的permute和reshape/view的区别介绍


Posted in Python onJune 18, 2020

二维的情况

先用二维tensor作为例子,方便理解。

permute作用为调换Tensor的维度,参数为调换的维度。例如对于一个二维Tensor来说,调用tensor.permute(1,0)意为将1轴(列轴)与0轴(行轴)调换,相当于进行转置。

In [20]: a    
Out[20]:    
tensor([[0, 1, 2],  
  [3, 4, 5]])  
      
In [21]: a.permute(1,0) 
Out[21]:    
tensor([[0, 3],   
  [1, 4],   
  [2, 5]])

如果使用view(3,2)或reshape(3,2),得到的tensor并不是转置的效果,而是相当于将原tensor的元素按行取出,然后按行放入到新形状的tensor中。

In [22]: a.reshape(3,2) 
Out[22]:    
tensor([[0, 1],   
  [2, 3],   
  [4, 5]])  
      
In [23]: a.view(3,2) 
Out[23]:    
tensor([[0, 1],   
  [2, 3],   
  [4, 5]])

高维的情况

一般使用permute的情况都是在更高维的情况下使用,例如对于一个图像batch,其形状为[batch, channel, height, width],我们可以使用tensor.permute(0,3,2,1)得到形状为[batch, width, height, channel]的tensor.

我们构造一个模拟的batch用于演示。

In [25]: a=torch.arange(2*3*2*1).reshape(2,3,2,1) 
             
In [26]: a          
Out[26]:           
tensor([[[[ 0],    # 这是第0张“图片”的第0号通道的2个元素      
   [ 1]],         
             
   [[ 2],    # 这是第0张“图片”的第1号通道的2个元素      
   [ 3]],         
             
   [[ 4],    # 这是第0张“图片”的第2号通道的2个元素      
   [ 5]]],         
             
             
  [[[ 6],         
   [ 7]],         
             
   [[ 8],         
   [ 9]],         
             
   [[10],         
   [11]]]])

a的形状为[2,3,2,1],这个batch有2张“图片”,每张图片有3个通道,每个通道为2x1,例如第0张图片的第0号通道为[[0], [1]].

In [27]: a.permute(0,3,2,1)
Out[27]:
tensor([[[[ 0, 2, 4],
   [ 1, 3, 5]]],


  [[[ 6, 8, 10],
   [ 7, 9, 11]]]])
In [28]: a.permute(0,3,2,1).shape
Out[28]: torch.Size([2, 1, 2, 3])

形状为[2,3,2,1]的batch执行permute(0,3,2,1)交换维度之后,得到的是[2,1,2,3],即[batch, width, height, channel]

可以理解为,对于一个高维的Tensor执行permute,我们没有改变数据的相对位置,而只是旋转了一下这个(超)立方体。或者也可以说,改变了我们对这个(超)立方体的“观察角度”而已。

补充知识:pytorch: torch.Tensor.view ------ reshape

如下所示:

torch.Tensoe.view(python method, in torch.Tensor)

作用: 将输入的torch.Tensor改变形状(size)并返回.返回的Tensor与输入的Tensor必须有相同的元素,相同的元素数目,但形状可以不一样

即,view起到的作用是reshape,view的参数的是改变后的shape.

示例如下:

>>> x = torch.randn(4, 4)
>>> x.size()
torch.Size([4, 4])
>>> y = x.view(16)
>>> y.size()
torch.Size([16])
>>> z = x.view(-1, 8) # the size -1 is inferred from other dimensions
>>> z.size()
torch.Size([2, 8])

view_as:

tensor_1.view_as(tensor_2):将tensor_1的形状改成与tensor_2一样

以上这篇基于PyTorch的permute和reshape/view的区别介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 3.0 模拟用户登录功能并实现三次错误锁定
Nov 01 Python
高质量Python代码编写的5个优化技巧
Nov 16 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
使用PyInstaller将python转成可执行文件exe笔记
May 26 Python
解决pyttsx3无法封装的问题
Dec 24 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
pd.DataFrame统计各列数值多少的实例
Dec 05 Python
python为QT程序添加图标的方法详解
Mar 09 Python
Python连接mysql数据库及简单增删改查操作示例代码
Aug 03 Python
Python使用OpenCV和K-Means聚类对毕业照进行图像分割
Jun 11 Python
linux中nohup和后台运行进程查看及终止
Jun 24 Python
Python Switch Case三种实现方法代码实例
Jun 18 #Python
Python3开发环境搭建详细教程
Jun 18 #Python
Python collections.defaultdict模块用法详解
Jun 18 #Python
python实现批量命名照片
Jun 18 #Python
pandas之分组groupby()的使用整理与总结
Jun 18 #Python
解决Keyerror ''acc'' KeyError: ''val_acc''问题
Jun 18 #Python
Python调用shell cmd方法代码示例解析
Jun 18 #Python
You might like
如何修改和添加Apache的默认站点目录
2013/07/05 PHP
thinkPHP查询方式小结
2016/01/09 PHP
实例详解PHP中html word 互转的方法
2016/01/28 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
JSON JQUERY模板实现说明
2010/07/03 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
Js制作简单弹出层DIV在页面居中 中间显示遮罩的具体方法
2013/08/08 Javascript
推荐9款炫酷的基于jquery的页面特效
2014/12/07 Javascript
使用百度地图api实现根据地址查询经纬度
2014/12/11 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
jQuery实现级联下拉框实战(5)
2017/02/08 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
vue实现的组件兄弟间通信功能示例
2018/12/04 Javascript
详解vue-cli 2.0配置文件(小结)
2019/01/14 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
基于layui实现高级搜索(筛选)功能
2019/07/26 Javascript
django+js+ajax实现刷新页面的方法
2017/05/22 Python
使用Pyinstaller的最新踩坑实战记录
2017/11/08 Python
python实现弹窗祝福效果
2019/04/07 Python
基于django传递数据到后端的例子
2019/08/16 Python
详解PyTorch中Tensor的高阶操作
2019/08/18 Python
python迭代器常见用法实例分析
2019/11/22 Python
Python程序控制语句用法实例分析
2020/01/14 Python
python+adb+monkey实现Rom稳定性测试详解
2020/04/23 Python
Django models文件模型变更错误解决
2020/05/11 Python
Python同时迭代多个序列的方法
2020/07/28 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
2020/07/28 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
欧洲最大的美妆零售网站:Feelunique
2017/01/14 全球购物
小学教师自我剖析材料
2014/09/29 职场文书
五四青年节活动总结
2015/02/10 职场文书
2016干部作风整顿心得体会
2016/01/22 职场文书
Vue实现动态查询规则生成组件
2021/05/27 Vue.js