基于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脚本实现12306火车票查询系统
Sep 30 Python
Python3.6 Schedule模块定时任务(实例讲解)
Nov 09 Python
Python中的pygal安装和绘制直方图代码分享
Dec 08 Python
python实现批量图片格式转换
Jun 16 Python
Python Series从0开始索引的方法
Nov 06 Python
详解Python装饰器
Mar 25 Python
python实现AES加密和解密
Mar 27 Python
Python文件打开方式实例详解【a、a+、r+、w+区别】
Mar 30 Python
Python将列表中的元素转化为数字并排序的示例
Dec 25 Python
python使用yaml 管理selenium元素的示例
Dec 01 Python
Pycharm 设置默认解释器路径和编码格式的操作
Feb 05 Python
python 制作本地应用搜索工具
Feb 27 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
四月新番又没了,《Re:从零开始的异世界生活》第二季延期至7月播出
2020/05/06 日漫
php中数字、字符与对象判断函数用法实例
2014/11/26 PHP
PHP实现的简单排列组合算法应用示例
2017/06/20 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
JQuery 确定css方框模型(盒模型Box Model)
2010/01/22 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
2014/03/06 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
超赞的jQuery图片滑块动画特效代码汇总
2016/01/25 Javascript
浅谈angular2的http请求返回结果的subcribe注意事项
2017/03/01 Javascript
加载 vue 远程代码的组件实例详解
2017/11/20 Javascript
JavaScript基于面向对象实现的猜拳游戏
2018/01/03 Javascript
javascript数据结构之多叉树经典操作示例【创建、添加、遍历、移除等】
2018/08/01 Javascript
jQuery内容选择器与表单选择器实例分析
2019/06/28 jQuery
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
[29:16]完美世界DOTA2联赛决赛日 Inki vs LBZS 第三场 11.08
2020/11/10 DOTA
浅谈python字符串方法的简单使用
2016/07/18 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
Django Rest framework解析器和渲染器详解
2019/07/25 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
详解html5 postMessage解决跨域通信的问题
2018/08/17 HTML / CSS
外贸采购员求职的自我评价
2013/11/26 职场文书
研究生求职推荐信范文
2013/11/30 职场文书
搞笑婚礼主持词
2014/03/13 职场文书
科学发展观标语
2014/10/08 职场文书
2014财务年终工作总结
2014/12/08 职场文书
公司开会通知
2015/04/20 职场文书
2015小学五年级班主任工作总结
2015/05/21 职场文书
2015中秋节晚会主持词
2015/07/01 职场文书
学会掌握自己命运的十条黄金法则:
2019/08/08 职场文书
Django使用echarts进行可视化展示的实践
2021/06/10 Python
压缩Redis里的字符串大对象操作
2021/06/23 Redis
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS
Docker容器harbor私有仓库部署和管理
2022/08/05 Servers