Pytorch之view及view_as使用详解


Posted in Python onDecember 31, 2019

view()函数是在torch.Tensor.view()下的一个函数,可以有tensor调用,也可以有variable调用。

其作用在于返回和原tensor数据个数相同,但size不同的tensor

【Numpy中的size是元素个数,但是在Pytorch中size等价为Numpy中的shape】

view函数的-1参数的作用在于基于另一参数,自动计算该维度的大小

很重要的一点

view函数只能由于contiguous的张量上,具体而言,就是在内存中连续存储的张量。

具体而言,可以参看 https://3water.com/article/177564.htm

所以,当tensor之前调用了transpose, permute函数就会是tensor内存中变得不再连续,就不能调用view函数。

所以,应该提前做tensor.contiguous()的操作

view函数与Pytorch0.4中新增的reshape的区别

reshape函数调用是不依赖于tensor在内存中是不是连续的。

reshape ≈ tensor.contiguous().view

代码

import numpy as np
import torch
from torch.autograd import Variable
 
x = torch.Tensor(2,2,2)
print(x)
 
y = x.view(1,8)
print(y)
 
z = x.view(-1,4) # the size -1 is inferred from other dimensions
print(z)
 
t = x.view(8)
print(t)

输出

tensor([[[1.3712e-14, 6.4069e+02],
   [4.3066e+21, 1.1824e+22]],

  [[4.3066e+21, 6.3828e+28],
   [3.8016e-39, 0.0000e+00]]])

#x.view(1,8)生成的是[1,8]的张量
tensor([[1.3712e-14, 6.4069e+02, 4.3066e+21, 1.1824e+22, 4.3066e+21, 6.3828e+28,
   3.8016e-39, 0.0000e+00]])

#x.view(-1,4)其中-1是在4下的另一个维度的大小,也就是8/4=2,所以生成的是[2,4]的张量
tensor([[1.3712e-14, 6.4069e+02, 4.3066e+21, 1.1824e+22],
  [4.3066e+21, 6.3828e+28, 3.8016e-39, 0.0000e+00]])

x.view(8)生成的是[8,]的张量,是个数组
tensor([1.3712e-14, 6.4069e+02, 4.3066e+21, 1.1824e+22, 4.3066e+21, 6.3828e+28,
  3.8016e-39, 0.0000e+00])

view_as

返回被视作与给定的tensor相同大小的原tensor。 等效于:

self.view(tensor.size())

具体用法为:

代码

a = torch.Tensor(2, 4)
b = a.view_as(torch.Tensor(4, 2))
print (b)

输出

tensor([[1.3712e-14, 6.4069e+02],
  [4.3066e+21, 1.1824e+22],
  [4.3066e+21, 6.3828e+28],
  [3.8016e-39, 0.0000e+00]])

以上这篇Pytorch之view及view_as使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python sys.path详细介绍
Oct 17 Python
Python中的默认参数详解
Jun 24 Python
Python实现批量将word转html并将html内容发布至网站的方法
Jul 14 Python
numpy给array增加维度np.newaxis的实例
Nov 01 Python
在Python中画图(基于Jupyter notebook的魔法函数)
Oct 28 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
Nov 19 Python
基于python的列表list和集合set操作
Nov 24 Python
Python实现图片添加文字
Nov 26 Python
基于torch.where和布尔索引的速度比较
Jan 02 Python
flask框架url与重定向操作实例详解
Jan 25 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
python和js交互调用的方法
Jun 23 Python
window环境pip切换国内源(pip安装异常缓慢的问题)
Dec 31 #Python
如何基于Python创建目录文件夹
Dec 31 #Python
Pytorch之contiguous的用法
Dec 31 #Python
python实现将json多行数据传入到mysql中使用
Dec 31 #Python
Pytorch之Variable的用法
Dec 31 #Python
Pytorch 多块GPU的使用详解
Dec 31 #Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 #Python
You might like
用PHP 快速生成 Flash 动画的方法
2007/03/06 PHP
PHP获取MAC地址的函数代码
2011/09/11 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
2013/01/11 PHP
深入理解curl类,可用于模拟get,post和curl下载
2013/06/08 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
PHP用身份证号获取星座和生肖的方法
2013/11/07 PHP
php对包含html标签的字符串进行截取的函数分享
2014/06/19 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
2014/12/24 PHP
9个实用的PHP代码片段分享
2015/01/22 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
在网页里看flash的trace数据的js类
2009/01/10 Javascript
解析jQuery的三种bind/One/Live事件绑定使用方法
2013/12/30 Javascript
浅谈javascript的调试
2015/01/28 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
详解Vue快速零配置的打包工具——parcel
2018/01/16 Javascript
Vuerouter的beforeEach与afterEach钩子函数的区别
2018/12/26 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
[57:24]LGD vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python下的Mysql模块MySQLdb安装详解
2014/04/09 Python
Python中pygame的mouse鼠标事件用法实例
2015/11/11 Python
Python文件操作基本流程代码实例
2017/12/11 Python
python解析html提取数据,并生成word文档实例解析
2018/01/22 Python
python计算两个数的百分比方法
2018/06/29 Python
python pytest进阶之conftest.py详解
2019/06/27 Python
python智联招聘爬虫并导入到excel代码实例
2019/09/09 Python
Python基本语法之运算符功能与用法详解
2019/10/22 Python
python如何调用php文件中的函数详解
2020/12/29 Python
HTML5在canvas中绘制复杂形状附效果截图
2014/06/23 HTML / CSS
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
电气专业推荐信范文
2013/11/18 职场文书
大学生饮食配送创业计划书
2014/01/04 职场文书
通知函格式范文
2015/04/27 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python