基于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 获取当前所在目录的方法详解
Aug 02 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
Numpy 将二维图像矩阵转换为一维向量的方法
Jun 05 Python
python中int与str互转方法
Jul 02 Python
用Python shell简化开发
Aug 08 Python
Python3.4学习笔记之常用操作符,条件分支和循环用法示例
Mar 01 Python
Django上使用数据可视化利器Bokeh解析
Jul 31 Python
Python3 解决读取中文文件txt编码的问题
Dec 20 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
python实现剪贴板的操作
Jul 01 Python
Python多线程实用方法以及共享变量资源竞争问题
Apr 12 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
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
利用php获取服务器时间的实现代码
2013/06/07 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
在NodeJS中启用ECMAScript 6小结(windos以及Linux)
2014/07/15 NodeJs
常用的Javascript设计模式小结
2015/12/09 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
Jquery 自定义事件实现发布/订阅的简单实例
2016/06/12 Javascript
微信小程序 input输入框详解及简单实例
2017/01/10 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[38:42]完美世界DOTA2联赛循环赛 Matador vs Forest BO2第二场 11.05
2020/11/05 DOTA
Python使用BeautifulSoup库解析HTML基本使用教程
2016/03/31 Python
python机器学习案例教程——K最近邻算法的实现
2017/12/28 Python
Python语言快速上手学习方法
2018/12/14 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
python多进程下实现日志记录按时间分割
2019/07/22 Python
Python基于read(size)方法读取超大文件
2020/03/12 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
2020/05/23 Python
什么是Python中的顺序表
2020/06/02 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
如何用Python徒手写线性回归
2021/01/25 Python
Guess美国官网:美国知名服装品牌
2019/04/08 全球购物
高三毕业生自我鉴定
2013/12/20 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
市场拓展计划书
2014/05/03 职场文书
2014年自愿离婚协议书
2014/10/10 职场文书
材料员岗位职责范本
2015/04/11 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书
2016入党心得体会范文
2016/01/06 职场文书
CSS3通过var()和calc()函数实现动画特效
2021/03/30 HTML / CSS