基于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计算文本文件行数的方法
Jul 06 Python
python pandas修改列属性的方法详解
Jun 09 Python
python使用循环打印所有三位数水仙花数的实例
Nov 13 Python
Python判断一个文件夹内哪些文件是图片的实例
Dec 07 Python
详解python执行shell脚本创建用户及相关操作
Apr 11 Python
PyQt5响应回车事件的方法
Jun 25 Python
Python Django切换MySQL数据库实例详解
Jul 16 Python
Python使用matplotlib 模块scatter方法画散点图示例
Sep 27 Python
python使用PIL剪切和拼接图片
Mar 23 Python
python 追踪except信息方式
Apr 25 Python
Keras loss函数剖析
Jul 06 Python
套娃式文件夹如何通过Python批量处理
Aug 23 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写MySQL数据 实现代码
2009/06/15 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
laravel框架上传图片实现实时预览功能
2019/10/14 PHP
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
js闭包所用的场合以及优缺点分析
2015/06/22 Javascript
基于JavaScript实现手机短信按钮倒计时(超简单)
2015/12/30 Javascript
jQuery实现表格与ckeckbox的全选与单选功能
2016/11/24 Javascript
vue2.0开发实践总结之入门篇
2016/12/06 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
Angular1.x复杂指令实例详解
2017/03/01 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
ionic3双击返回退出应用的方法
2019/09/17 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
JavaScript中遍历的十种方法总结
2020/12/15 Javascript
JS+CSS实现动态时钟
2021/02/19 Javascript
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
详解python函数传参是传值还是传引用
2018/01/16 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
python看某个模块的版本方法
2018/10/16 Python
Python学习笔记之While循环用法分析
2019/08/14 Python
python 判断txt每行内容中是否包含子串并重新写入保存的实例
2020/03/12 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
露营世界:Camping World
2017/02/02 全球购物
联强国际笔试题面试题
2013/07/10 面试题
应届行政管理专业个人自我评价
2013/12/28 职场文书
大学毕业自我评价
2014/02/02 职场文书
青年文明号服务承诺
2014/03/31 职场文书
法院先进个人事迹材料
2014/05/04 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
环境保护宣传标语大全!
2019/06/28 职场文书
聊聊pytorch测试的时候为何要加上model.eval()
2021/05/23 Python
SQL实现LeetCode(180.连续的数字)
2021/08/04 MySQL