基于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实现登录人人网并抓取新鲜事的方法
May 11 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
有关Python的22个编程技巧
Aug 29 Python
python读取txt文件中特定位置字符的方法
Dec 24 Python
Python实现爬取马云的微博功能示例
Feb 16 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
下载官网python并安装的步骤详解
Oct 12 Python
Python2.6版本pip安装步骤解析
Aug 17 Python
Python实现七个基本算法的实例代码
Oct 08 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
Python matplotlib多个子图绘制整合
Apr 13 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
小偷PHP+Html+缓存
2006/12/20 PHP
php实现天干地支计算器示例
2014/03/14 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
2016/09/19 PHP
关于图片验证码设计的思考
2007/01/29 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
Vue.js系列之项目结构说明(2)
2017/01/03 Javascript
jquery表单验证实例仿Toast提示效果
2017/03/03 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
限时抢购-倒计时的完整实例(分享)
2017/09/17 Javascript
js判断密码强度的方法
2020/03/18 Javascript
Python中使用支持向量机SVM实践
2017/12/27 Python
python实现简单登陆系统
2018/10/18 Python
centos7之Python3.74安装教程
2019/08/15 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
HTML5 audio标签使用js进行播放控制实例
2015/04/24 HTML / CSS
英国花园家具中心:Garden Furniture Centre
2017/08/24 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
如何找出EMP表里面SALARY第N高的employee
2013/12/05 面试题
证券期货行业个人的自我评价
2013/12/26 职场文书
亲子拓展活动方案
2014/02/20 职场文书
2014年道德讲堂实施方案
2014/03/05 职场文书
好听的队名和口号
2014/06/09 职场文书
婚前协议书范本
2014/10/27 职场文书
2015年班组长工作总结
2015/04/10 职场文书
2015七夕情人节宣传语
2015/07/14 职场文书
2016情人节宣传语
2015/07/14 职场文书
校运会班级霸气口号
2015/12/24 职场文书
2016北大自主招生自荐信模板
2016/01/28 职场文书
写给消防战士们的一封慰问信
2019/10/07 职场文书
CSS巧用渐变实现高级感背景光动画
2021/12/06 HTML / CSS
windows安装 redis 6.2.6最新步骤详解
2022/04/26 Redis