基于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合并文本文件示例
Feb 07 Python
Python中AND、OR的一个使用小技巧
Feb 18 Python
用Python进行一些简单的自然语言处理的教程
Mar 31 Python
Python中使用hashlib模块处理算法的教程
Apr 28 Python
Python 16进制与中文相互转换的实现方法
Jul 09 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
举例讲解Python常用模块
Mar 08 Python
PyCharm 2019.3发布增加了新功能一览
Dec 08 Python
基于Numba提高python运行效率过程解析
Mar 02 Python
python实现图像外边界跟踪操作
Jul 13 Python
Python常用GUI框架原理解析汇总
Dec 07 Python
Python之Sklearn使用入门教程
Feb 19 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
php在window iis的莫名问题的测试方法
2013/05/14 PHP
PHP的变量类型和作用域详解
2014/03/12 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
javascript 写类方式之六
2009/07/05 Javascript
checkbox全选所涉及到的知识点介绍
2013/12/31 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
JS实现点击Radio动态更新table数据
2017/07/18 Javascript
vue实现微信分享朋友圈,发送朋友的示例讲解
2018/02/10 Javascript
Vue中的slot使用插槽分发内容的方法
2018/03/01 Javascript
使用Vuex解决Vue中的身份验证问题
2018/09/28 Javascript
react-router4按需加载(踩坑填坑)
2019/01/06 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
python删除列表中重复记录的方法
2015/04/28 Python
Python实现Logger打印功能的方法详解
2017/09/01 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
2018/04/23 Python
Python常见字典内建函数用法示例
2018/05/14 Python
python实现自动发送报警监控邮件
2018/06/21 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
浅谈Pandas Series 和 Numpy array中的相同点
2019/06/28 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
Python+unittest+requests 接口自动化测试框架搭建教程
2020/10/09 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
html5应用缓存_动力节点Java学院整理
2017/07/13 HTML / CSS
介绍一下#error预处理
2015/09/25 面试题
信息管理专业推荐信
2013/10/29 职场文书
企业年会主持词
2014/03/27 职场文书
《菜园里》教学反思
2014/04/17 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL