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生成IP段的方法
Jul 07 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
多个应用共存的Django配置方法
May 30 Python
Python supervisor强大的进程管理工具的使用
Apr 24 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
numpy.transpose()实现数组的转置例子
Dec 02 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
python批量修改交换机密码的示例
Sep 22 Python
Python更改pip镜像源的方法示例
Dec 01 Python
Python 数据科学 Matplotlib图库详解
Jul 07 Python
pycharm无法安装cv2模块问题
May 20 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
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
2011/06/30 PHP
解析PHP中empty is_null和isset的测试
2013/06/29 PHP
Zend Framework教程之Zend_Form组件实现表单提交并显示错误提示的方法
2016/03/21 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
向fckeditor编辑器插入指定代码的方法
2007/05/25 Javascript
Javascript 圆角div的实现代码
2009/10/15 Javascript
在javascript将NodeList作为Array数组处理的方法
2010/07/09 Javascript
javascript 数据类型转换(parseInt,parseFloat)
2010/07/20 Javascript
用jQuery实现一些导航条切换,显示隐藏的实例代码
2013/06/08 Javascript
Javascript正则控制文本框只能输入整数或浮点数
2014/09/02 Javascript
JavaScript将字符串转换为整数的方法
2015/04/14 Javascript
浅谈下拉菜单中的Option对象
2015/05/10 Javascript
javascript实现删除前弹出确认框
2015/06/04 Javascript
理解jquery事件冒泡
2016/01/03 Javascript
三种Node.js写文件的方式
2016/03/08 Javascript
js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解
2016/04/01 Javascript
省市区三级联动jquery实现代码
2020/04/15 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
Python OpenCV处理图像之滤镜和图像运算
2018/07/10 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
通过实例解析Python文件操作实现步骤
2020/09/21 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
鼠标滚轮事件和Mac触控板双指事件
2019/12/23 HTML / CSS
印度最好的在线药品订购网站:PharmEasy
2018/11/30 全球购物
我爱读书演讲稿
2014/05/07 职场文书
求职自荐信怎么写
2015/03/04 职场文书
销售区域经理岗位职责
2015/04/10 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
基层组织建设年活动总结
2015/05/09 职场文书
2016重阳节红领巾广播稿
2015/12/18 职场文书
2017年寒假少先队活动总结
2016/04/06 职场文书
Opencv中cv2.floodFill算法的使用
2021/06/18 Python
Python读写yaml文件
2022/03/20 Python