基于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中的高级数据结构详解
Mar 27 Python
python中的闭包函数
Feb 09 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
使用pandas把某一列的字符值转换为数字的实例
Jan 29 Python
python 用for循环实现1~n求和的实例
Feb 01 Python
python脚本调用iftop 统计业务应用流量的思路详解
Oct 11 Python
python 实现绘制整齐的表格
Nov 18 Python
pytorch实现focal loss的两种方式小结
Jan 02 Python
pytorch 彩色图像转灰度图像实例
Jan 13 Python
jupyter 导入csv文件方式
Apr 21 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
mysql5写入和读出乱码解决
2006/11/25 PHP
PHP IPV6正则表达式验证代码
2010/02/16 PHP
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
PHP实现的英文名字全拼随机排号脚本
2014/07/04 PHP
PHP实现懒加载的方法
2015/03/07 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
setAttribute 与 class冲突解决
2008/02/17 Javascript
在IE下获取object(ActiveX)的Param的代码
2009/09/15 Javascript
替代window.event.srcElement效果的可兼容性的函数
2009/12/18 Javascript
jquery利用event.which方法获取键盘输入值的代码
2011/10/09 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
2014/12/18 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
jQuery使用Selectator插件实现多选下拉列表过滤框(附源码下载)
2016/04/08 Javascript
jQuery代码性能优化的10种方法
2016/06/21 Javascript
Vue.js中数组变动的检测详解
2016/10/12 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
关于javascript sort()排序你可能忽略的一点理解
2017/07/18 Javascript
微信小程序之页面跳转和参数传递的实现
2017/09/29 Javascript
webstrom Debug 调试vue项目的方法步骤
2018/07/17 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
小程序实现tab标签页
2020/11/16 Javascript
[43:58]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第二局
2016/02/27 DOTA
python数据结构之二叉树的建立实例
2014/04/29 Python
详解Python爬虫的基本写法
2016/01/08 Python
利用python获取当前日期前后N天或N月日期的方法示例
2017/07/30 Python
详解pandas数据合并与重塑(pd.concat篇)
2019/07/09 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
解决python便携版无法直接运行py文件的问题
2020/09/01 Python
Python3使用tesserocr识别字母数字验证码的实现
2021/01/29 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
Farnell德国:电子元器件供应商
2018/07/10 全球购物
考试不及格的检讨书
2014/01/22 职场文书
法定代表人身份证明书(含说明)
2014/10/02 职场文书
上课睡觉检讨书300字
2014/11/18 职场文书