基于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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
Golang与python线程详解及简单实例
Apr 27 Python
Python subprocess库的使用详解
Oct 26 Python
利用Python正则表达式过滤敏感词的方法
Jan 21 Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 Python
python分数表示方式和写法
Jun 26 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
基于python plotly交互式图表大全
Dec 07 Python
python不到50行代码完成了多张excel合并的实现示例
May 28 Python
python实现将中文日期转换为数字日期
Jul 14 Python
UI自动化定位常用实现方法代码示例
Oct 27 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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中Y2K38的漏洞解决方法实例分析
2014/09/22 PHP
php递归遍历删除文件的方法
2015/04/17 PHP
php curl操作API接口类完整示例
2019/05/21 PHP
jquery datatable后台封装数据示例代码
2014/08/07 Javascript
12行javascript代码绘制一个八卦图
2015/04/02 Javascript
Jquery实现纵向横向菜单
2016/01/24 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
2016/04/17 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
jQuery按需加载轮播图(web前端性能优化)
2017/02/17 Javascript
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
解决vue打包之后静态资源图片失效的问题
2018/02/21 Javascript
详解如何使用babel进行es6文件的编译
2018/05/29 Javascript
webpack打包多页面的方法
2018/11/30 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
详解vue 不同环境配置不同的打包命令
2019/04/07 Javascript
如何阻止小程序遮罩层下方图层滚动
2019/09/05 Javascript
Python与Redis的连接教程
2015/04/22 Python
Python Socket传输文件示例
2017/01/16 Python
python实现解数独程序代码
2017/04/12 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
Python中实例化class的执行顺序示例详解
2018/10/14 Python
python 获取键盘输入,同时有超时的功能示例
2018/11/13 Python
Tensorflow不支持AVX2指令集的解决方法
2020/02/03 Python
澳大利亚最便宜的网上药房:Chemist Warehouse
2020/01/30 全球购物
小学教师学期末自我评价
2013/09/25 职场文书
感恩之星事迹材料
2014/05/03 职场文书
国际商务专业求职信
2014/07/15 职场文书
公安交警个人对照检查材料思想汇报
2014/10/01 职场文书
基层工作经验证明样本
2014/11/16 职场文书
奖金申请报告模板
2015/05/15 职场文书
诚实守信主题班会
2015/08/13 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
CSS 还能这样玩?奇思妙想渐变的艺术
2021/04/27 HTML / CSS
idea搭建可运行Servlet的Web项目
2021/06/26 Java/Android
java协程框架quasar和kotlin中的协程对比分析
2022/02/24 Java/Android