基于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中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
Django的信号机制详解
May 05 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
Jan 07 Python
Python第三方库h5py_读取mat文件并显示值的方法
Feb 08 Python
关于Python中的向量相加和numpy中的向量相加效率对比
Aug 26 Python
python模块常用用法实例详解
Oct 17 Python
Tensorflow中的dropout的使用方法
Mar 13 Python
Python3+selenium实现cookie免密登录的示例代码
Mar 18 Python
快速了解Python开发环境Spyder
Jun 29 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
python使用PySimpleGUI设置进度条及控件使用
Jun 10 Python
Python实现Excel文件的合并(以新冠疫情数据为例)
Mar 20 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中实现图片的锐化
2006/10/09 PHP
NT IIS下用ODBC连接数据库
2006/10/09 PHP
php Static关键字实用方法
2010/06/04 PHP
PHP stream_context_create()函数的使用示例
2015/05/12 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
php检查页面是否被百度收录
2015/10/28 PHP
php curl获取到json对象并转成数组array的方法
2018/05/31 PHP
PHP 与 js的通信(via ajax,json)
2010/11/16 Javascript
javascript中的继承实例代码
2011/04/27 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
js 判断js函数、变量是否存在的简单示例代码
2014/03/04 Javascript
自己使用js/jquery写的一个定制对话框控件
2014/05/02 Javascript
JQuery 在线引用及测试引用是否成功
2014/06/24 Javascript
jQuery+easyui中的combobox实现下拉框特效
2015/02/27 Javascript
js重写方法的简单实现
2016/07/10 Javascript
浅谈bootstrap使用中的一些问题以及解决过程
2016/10/18 Javascript
分类解析jQuery选择器
2016/11/23 Javascript
JavaScript实现简易的天数计算器实例【附demo源码下载】
2017/01/18 Javascript
jQuery实现鼠标经过显示动画边框特效
2017/03/24 jQuery
详解Vue用自定义指令完成一个下拉菜单(select组件)
2017/10/31 Javascript
一步步教会你微信小程序的登录鉴权
2018/04/09 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
vue路由传参三种基本方式详解
2019/12/09 Javascript
在Python中操作文件之truncate()方法的使用教程
2015/05/25 Python
使用Python绘制图表大全总结
2017/02/11 Python
python生成二维码的实例详解
2017/10/29 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
简单了解django缓存方式及配置
2019/07/19 Python
jupyter notebook实现显示行号
2020/04/13 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
会计实习期自我鉴定
2013/10/06 职场文书
少先队学雷锋活动总结范文
2014/03/09 职场文书
大学社团活动总结
2014/04/26 职场文书
2015年国庆节寄语
2015/08/17 职场文书