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 sqlobject(mysql)中文乱码解决方法
Nov 14 Python
浅谈Python类的__getitem__和__setitem__特殊方法
Dec 25 Python
Python中的默认参数实例分析
Jan 29 Python
python多进程提取处理大量文本的关键词方法
Jun 05 Python
python学生信息管理系统(初级版)
Oct 17 Python
使用pickle存储数据dump 和 load实例讲解
Dec 30 Python
python 利用zmail库发送邮件
Sep 11 Python
python爬取音频下载的示例代码
Oct 19 Python
如何让PyQt5中QWebEngineView与JavaScript交互
Oct 21 Python
python 爬虫请求模块requests详解
Dec 04 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 Python
python基础之错误和异常处理
Oct 24 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 mysql索引问题
2008/06/07 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
php中的三元运算符使用说明
2011/07/03 PHP
header跳转和include包含问题详解
2012/09/08 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP读取并输出XML文件数据的简单实现方法
2017/12/22 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
用JavaScript实现单继承和多继承的简单方法
2009/03/29 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
详解JS函数重载
2014/12/04 Javascript
javascript中sort()的用法实例分析
2015/01/30 Javascript
jquery实现TAB选项卡鼠标经过带延迟效果的方法
2015/07/27 Javascript
JS基于myFocus库实现各种功能的tab选项卡切换效果
2015/09/19 Javascript
Node.js中npm常用命令大全
2016/06/09 Javascript
JS基于构造函数实现的菜单滑动显隐效果【测试可用】
2016/06/21 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
js实现三级联动效果(简单易懂)
2017/03/27 Javascript
vue+vuex+axios+echarts画一个动态更新的中国地图的方法
2017/12/19 Javascript
Vue中Axios从远程/后台读取数据
2019/01/21 Javascript
layer.prompt使文本框为空的情况下也能点击确定的方法
2019/09/24 Javascript
js实现计时器秒表功能
2019/12/16 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
JS自定义滚动条效果
2020/03/13 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
[47:08]OG vs INfamous 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
TensorFlow如何实现反向传播
2018/02/06 Python
python实现验证码识别功能
2018/06/07 Python
详解django.contirb.auth-认证
2018/07/16 Python
python 判断三个数字中的最大值实例代码
2019/07/24 Python
实例教程 利用html5和css3打造一款创意404页面
2014/10/20 HTML / CSS
学生会招新策划书
2014/02/14 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
上海世博会口号
2014/06/19 职场文书
2014年村委会工作总结
2014/11/24 职场文书
奠基仪式致辞
2015/07/30 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL