基于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 30 Python
Python编程入门之Hello World的三种实现方式
Nov 13 Python
python中os和sys模块的区别与常用方法总结
Nov 14 Python
python实现决策树分类算法
Dec 21 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
python 删除列表里所有空格项的方法总结
Apr 18 Python
分享8个非常流行的 Python 可视化工具包
Jun 05 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
深入解析NumPy中的Broadcasting广播机制
May 30 Python
python opencv旋转图片的使用方法
Jun 04 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
德生PL660的电路分析和打磨
2021/03/02 无线电
乐信RP2100的电路分析和打磨
2021/03/02 无线电
PHP 动态随机生成验证码类代码
2010/04/09 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
基于jquery的给文章加入关键字链接
2010/10/26 Javascript
js/jquery去掉空格,回车,换行示例代码
2013/11/05 Javascript
Jquery操作radio的简单实例
2014/01/06 Javascript
使用js dom和jquery分别实现简单增删改
2014/09/11 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
ztree获取选中节点时不能进入可视区域出现BUG如何解决
2015/12/03 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
vue实现底部菜单功能
2018/07/24 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[47:38]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
[32:07]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第一场 12.16
2020/12/17 DOTA
python 专题九 Mysql数据库编程基础知识
2017/03/16 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
keras多显卡训练方式
2020/06/10 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
全网最详细的PyCharm+Anaconda的安装过程图解
2021/01/25 Python
HTML+CSS3 模仿Windows7 桌面效果
2010/06/17 HTML / CSS
Alba Moda瑞士网上商店:独家意大利时尚女装销售
2016/11/28 全球购物
俄罗斯Sportmarket体育在线商店:用于旅游和户外活动
2019/11/12 全球购物
目标责任书范文
2014/04/14 职场文书
施工安全责任书
2014/04/14 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
2015自愿离婚协议书范本
2015/01/28 职场文书
堂吉诃德读书笔记
2015/06/30 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL
golang操作rocketmq的示例代码
2022/04/06 Golang