基于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实现的简单猜数字游戏
Apr 04 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
详解Python list 与 NumPy.ndarry 切片之间的对比
Jul 24 Python
pycharm远程开发项目的实现步骤
Jan 20 Python
Python中函数的返回值示例浅析
Aug 28 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
May 11 Python
python 写函数在一定条件下需要调用自身时的写法说明
Jun 01 Python
使用openCV去除文字中乱入的线条实例
Jun 02 Python
在keras中实现查看其训练loss值
Jun 16 Python
浅谈Keras参数 input_shape、input_dim和input_length用法
Jun 29 Python
Django创建一个后台的基本步骤记录
Oct 02 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内核之php in array
2015/11/10 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
PHP code 验证码生成类定义和简单使用示例
2020/05/27 PHP
Maps Javascript
2007/01/22 Javascript
判断iframe是否加载完成的完美方法
2010/01/07 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
简介JavaScript中valueOf()方法的使用
2015/06/05 Javascript
灵活的理解JavaScript中的this指向
2016/02/25 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
原生js实现放大镜
2017/02/20 Javascript
Angular2学习教程之ng中变更检测问题详解
2017/05/28 Javascript
jQuery实现可兼容IE6的淡入淡出效果告警提示功能示例
2017/09/20 jQuery
webpack4 CSS Tree Shaking的使用
2018/09/03 Javascript
详解JavaScript栈内存与堆内存
2019/04/04 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
解决vue 表格table列求和的问题
2019/11/06 Javascript
vue.js实现简单购物车功能
2020/05/30 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
Python中的startswith和endswith函数使用实例
2014/08/25 Python
Python实现的单向循环链表功能示例
2017/11/10 Python
python如何重载模块实例解析
2018/01/25 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
Python3批量移动指定文件到指定文件夹方法示例
2019/09/02 Python
tensorflow将图片保存为tfrecord和tfrecord的读取方式
2020/02/17 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
Craghoppers德国官网:户外和旅行服装
2020/02/14 全球购物
Prototype是怎么扩展DOM的
2014/10/01 面试题
亲子拓展活动方案
2014/02/20 职场文书
我的中国梦演讲稿高中篇
2014/08/19 职场文书
2014乡镇班子个人对照检查材料思想汇报
2014/09/26 职场文书
2015年电信员工工作总结
2015/05/26 职场文书
php字符串倒叙
2021/04/01 PHP
Matplotlib可视化之添加让统计图变得简单易懂的注释
2021/06/11 Python
解决MySQL添加新用户-ERROR 1045 (28000)的问题
2022/03/03 MySQL