基于PyTorch中view的用法说明


Posted in Python onMarch 03, 2021

相当于numpy中resize()的功能,但是用法可能不太一样。

我的理解是:

把原先tensor中的数据按照行优先的顺序排成一个一维的数据(这里应该是因为要求地址是连续存储的),然后按照参数组合成其他维度的tensor。

比如说是不管你原先的数据是[[[1,2,3],[4,5,6]]]还是[1,2,3,4,5,6],因为它们排成一维向量都是6个元素,所以只要view后面的参数一致,得到的结果都是一样的。

比如,

a=torch.Tensor([[[1,2,3],[4,5,6]]])
b=torch.Tensor([1,2,3,4,5,6])
print(a.view(1,6))
print(b.view(1,6))

得到的结果都是

tensor([[1., 2., 3., 4., 5., 6.]])

再看一个例子:

a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.view(3,2))

将会得到:

tensor([[1., 2.],
    [3., 4.],
    [5., 6.]])

相当于就是从1,2,3,4,5,6顺序的拿数组来填充需要的形状。但是如果您想得到如下的结果:

tensor([[1., 4.],
    [2., 5.],
    [3., 6.]])

就需要使用另一个函数了:permute()。用法参见我的另一篇博客:PyTorch中permute的用法

另外,参数不可为空。参数中的-1就代表这个位置由其他位置的数字来推断,只要在不致歧义的情况的下,view参数就可以推断出来,也就是人可以推断出形状的情况下,view函数也可以推断出来。

比如a tensor的数据个数是6个,如果view(1,-1),我们就可以根据tensor的元素个数推断出-1代表6。

而如果是view(-1,-1,2),人不知道怎么推断,机器也不知道。

还有一种情况是人可以推断出来,但是机器推断不出来的:view(-1,-1,6),人可以知道-1都代表1,但是机器不允许同时有两个负1。

如果没有-1,那么所有参数的乘积就要和tensor中元素的总个数一致了,否则就会出现错误。

补充:pytorch中x.view()和permute用法

pytorch中x.view()用法

在pytorch中经常会看到x.view(),它表示将Tensor的维度转变为view指定的维度,有点类似于resize函数

b=torch.Tensor([[[[1,2,3],[4,5,6],[7,8,9]],[[1,2,3],[4,5,6],[7,8,9]]]])
print(b.size())
(1, 2, 3, 3)
print(b.view(b.size(0),-1))
tensor([[1., 2., 3., 4., 5., 6., 7., 8., 9., 1., 2., 3., 4., 5., 6., 7., 8., 9.]])
print(b.view(b.size(0),-1).size())
(1, 18)

b.size(0)表示b中0维度==1,-1是按照原数据自动分配的列数。

a=torch.Tensor([[[1,2,3],[4,5,6]]])
print(a.size())
(1, 2, 3)
print(a.view(6,-1))
tensor([[1.],
[2.],
[3.],
[4.],
[5.],
[6.]])
print(a.view(6,-1).size())
(6, 1)

将a转变成6行1列

print(a.view(-1,6).size())
(1, 6)

或者将a转变成1行6列

在程序里还经常见到view函数后面跟着permute()函数,这个函数是做维度换位的

print(a.view(-1,6).permute(1,0))
tensor([[1.],
[2.],
[3.],
[4.],
[5.],
[6.]])
print(a.view(-1,6).permute(1,0).size())
(6, 1)

加了permute,a就由(1,6)变成(6,1)了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。如有错误或未考虑完全的地方,望不吝赐教。

Python 相关文章推荐
python多线程编程方式分析示例详解
Dec 06 Python
Python里隐藏的“禅”
Jun 16 Python
Python语言描述连续子数组的最大和
Jan 04 Python
Python求出0~100以内的所有素数
Jan 23 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
python读写csv文件方法详细总结
Jul 05 Python
Django用户认证系统 Web请求中的认证解析
Aug 02 Python
Python 批量刷博客园访问量脚本过程解析
Aug 30 Python
Python的Lambda函数用法详解
Sep 03 Python
基于OpenCV的路面质量检测的实现
Nov 04 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
Mar 03 #Python
对pytorch中x = x.view(x.size(0), -1) 的理解说明
Mar 03 #Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
Mar 03 #Python
Pytorch 中的optimizer使用说明
Mar 03 #Python
解决pytorch 的state_dict()拷贝问题
Mar 03 #Python
解决pytorch 保存模型遇到的问题
Mar 03 #Python
解决pytorch 模型复制的一些问题
Mar 03 #Python
You might like
PHP 模拟$_PUT实现代码
2010/03/15 PHP
PHP实现对文件锁进行加锁、解锁操作的方法
2017/07/04 PHP
php 中htmlentities导致中文无法查询问题
2018/09/10 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
JObj预览一个JS的框架
2008/03/13 Javascript
js函数使用技巧之 setTimeout(function(){},0)
2009/02/09 Javascript
picChange 图片切换特效的函数代码
2010/05/06 Javascript
JavaScript 匿名函数(anonymous function)与闭包(closure)
2011/10/04 Javascript
在javaScript中关于submit和button的区别介绍
2013/10/20 Javascript
javascript确认框的三种使用方法
2013/12/17 Javascript
使用node+vue.js实现SPA应用
2016/01/28 Javascript
jquery 仿锚点跳转到页面指定位置的实例
2017/02/14 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
JavaScript实现微信号随机切换代码
2018/03/09 Javascript
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
JavaScript中this用法学习笔记
2019/03/17 Javascript
微信小程序与公众号实现数据互通的方法
2019/07/25 Javascript
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
2019/01/23 Python
pymongo中group by的操作方法教程
2019/03/22 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
Python Tkinter实例——模拟掷骰子
2020/10/24 Python
前端制作动画的几种方式(css3,js)
2016/12/12 HTML / CSS
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
金融行业职业生涯规划范文
2014/01/17 职场文书
企业车辆管理制度
2014/01/24 职场文书
电气自动化个人求职信范文
2014/02/03 职场文书
教师对学生的寄语
2014/04/03 职场文书
公司委托书怎么写
2014/08/02 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
2015年销售部工作总结范文
2015/04/27 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
Arthas排查Kubernetes中应用频繁挂掉重启异常
2022/02/28 MySQL
Win11如何设置右键单击显示所有选项?Win11右键单击显示所有选项设置教程
2022/04/08 数码科技
使用ICOM IC-R9500接收机同时测评十台收音机中波接收性能
2022/05/10 无线电