基于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中IPYTHON入门实例
May 11 Python
Django中使用celery完成异步任务的示例代码
Jan 23 Python
利用Pyhton中的requests包进行网页访问测试的方法
Dec 26 Python
Python中的集合介绍
Jan 28 Python
Python 中包/模块的 `import` 操作代码
Apr 22 Python
三步实现Django Paginator分页的方法
Jun 11 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
python实现网站用户名密码自动登录功能
Aug 09 Python
python 接口实现 供第三方调用的例子
Aug 13 Python
Django继承自带user表并重写的例子
Nov 18 Python
Python turtle画图库&&画姓名实例
Jan 19 Python
python爬虫开发之urllib模块详细使用方法与实例全解
Mar 09 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类中Static方法效率测试代码
2010/10/17 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
理解javascript模块化
2016/03/28 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
Angular.js自定义指令学习笔记实例
2017/02/24 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
2017/03/25 jQuery
jQuery插件FusionCharts绘制的3D双柱状图效果示例【附demo源码】
2017/04/20 jQuery
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
node.js+express+mySQL+ejs+bootstrop实现网站登录注册功能
2018/01/12 Javascript
JavaScript惰性载入函数实例分析
2019/03/27 Javascript
详解JavaScript中的函数、对象
2019/04/01 Javascript
node.js中 mysql 增删改查操作及async,await处理实例分析
2020/02/11 Javascript
微信小程序实现导航栏和内容上下联动功能代码
2020/06/29 Javascript
Vue——前端生成二维码的示例
2020/12/19 Vue.js
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
VSCode下好用的Python插件及配置
2018/04/06 Python
PyQt5实现拖放功能
2018/04/25 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Python使用循环神经网络解决文本分类问题的方法详解
2020/01/16 Python
python写文件时覆盖原来的实例方法
2020/07/22 Python
python小技巧——将变量保存在本地及读取
2020/11/13 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
2021/02/05 Python
Timberland美国官网:全球领先的户外品牌
2016/08/15 全球购物
美国折衷生活方式品牌:Robert Graham
2018/07/13 全球购物
西安夏日科技有限公司Java笔试题
2013/01/11 面试题
《七颗钻石》教学反思
2014/02/28 职场文书
彩妆大赛策划方案
2014/05/13 职场文书
小区文明倡议书
2014/05/16 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
农村党员学习党的群众路线教育实践活动心得体会
2014/11/04 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
财政局个人总结
2015/03/04 职场文书
2016校本研修培训心得体会
2016/01/08 职场文书