PyTorch中的Variable变量详解


Posted in Python onJanuary 07, 2020

一、了解Variable

顾名思义,Variable就是 变量 的意思。实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性。

具体来说,在pytorch中的Variable就是一个存放会变化值的地理位置,里面的值会不停发生片花,就像一个装鸡蛋的篮子,鸡蛋数会不断发生变化。那谁是里面的鸡蛋呢,自然就是pytorch中的tensor了。(也就是说,pytorch都是有tensor计算的,而tensor里面的参数都是Variable的形式)。如果用Variable计算的话,那返回的也是一个同类型的Variable。

【tensor 是一个多维矩阵】

用一个例子说明,Variable的定义:

import torch
from torch.autograd import Variable # torch 中 Variable 模块
tensor = torch.FloatTensor([[1,2],[3,4]])
# 把鸡蛋放到篮子里, requires_grad是参不参与误差反向传播, 要不要计算梯度
variable = Variable(tensor, requires_grad=True)
 
print(tensor)
"""
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""
 
print(variable)
"""
Variable containing:
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""

注:tensor不能反向传播,variable可以反向传播。

二、Variable求梯度

Variable计算时,它会逐渐地生成计算图。这个图就是将所有的计算节点都连接起来,最后进行误差反向传递的时候,一次性将所有Variable里面的梯度都计算出来,而tensor就没有这个能力。

v_out.backward() # 模拟 v_out 的误差反向传递

print(variable.grad) # 初始 Variable 的梯度
'''
 0.5000 1.0000
 1.5000 2.0000
'''

三、获取Variable里面的数据

直接print(Variable) 只会输出Variable形式的数据,在很多时候是用不了的。所以需要转换一下,将其变成tensor形式。

print(variable)  # Variable 形式
"""
Variable containing:
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""
 
print(variable.data) # 将variable形式转为tensor 形式
"""
 1 2
 3 4
[torch.FloatTensor of size 2x2]
"""
 
print(variable.data.numpy()) # numpy 形式
"""
[[ 1. 2.]
 [ 3. 4.]]
"""

扩展

在PyTorch中计算图的特点总结如下:

autograd根据用户对Variable的操作来构建其计算图。

1、requires_grad

variable默认是不需要被求导的,即requires_grad属性默认为False,如果某一个节点的requires_grad为True,那么所有依赖它的节点requires_grad都为True。

2、volatile

variable的volatile属性默认为False,如果某一个variable的volatile属性被设为True,那么所有依赖它的节点volatile属性都为True。volatile属性为True的节点不会求导,volatile的优先级比requires_grad高。

3、retain_graph

多次反向传播(多层监督)时,梯度是累加的。一般来说,单次反向传播后,计算图会free掉,也就是反向传播的中间缓存会被清空【这就是动态度的特点】。为进行多次反向传播需指定retain_graph=True来保存这些缓存。

4、backward()

反向传播,求解Variable的梯度。放在中间缓存中。

以上这篇PyTorch中的Variable变量详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python的id()函数介绍
Feb 10 Python
python创建只读属性对象的方法(ReadOnlyObject)
Feb 10 Python
python在命令行下使用google翻译(带语音)
Jan 16 Python
python有证书的加密解密实现方法
Nov 19 Python
Python中的高级数据结构详解
Mar 27 Python
python 写入csv乱码问题解决方法
Oct 23 Python
Python使用openpyxl读写excel文件的方法
Jun 30 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
May 13 Python
PYQT5设置textEdit自动滚屏的方法
Jun 14 Python
Python学习笔记之While循环用法分析
Aug 14 Python
Python 如何测试文件是否存在
Jul 31 Python
Pyqt助手安装PyQt5帮助文档过程图解
Nov 20 Python
python enumerate内置函数用法总结
Jan 07 #Python
pytorch加载自定义网络权重的实现
Jan 07 #Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 #Python
Pytorch 神经网络—自定义数据集上实现教程
Jan 07 #Python
浅谈Python访问MySQL的正确姿势
Jan 07 #Python
pytorch自定义二值化网络层方式
Jan 07 #Python
Pytorch: 自定义网络层实例
Jan 07 #Python
You might like
php 判断网页是否是utf8编码的方法
2014/06/06 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
jQuery对表单元素的取值和赋值操作代码
2011/05/19 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
基于jquery异步传输json数据格式实例代码
2013/11/23 Javascript
学JavaScript七大注意事项【必看】
2016/05/04 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
JS模拟超市简易收银台小程序代码解析
2017/08/18 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
React-Router如何进行页面权限管理的方法
2017/12/06 Javascript
AngularJS集合数据遍历显示的实例
2017/12/27 Javascript
简易Vue评论框架的实现(父组件的实现)
2018/01/08 Javascript
JavaScript使用Math.random()生成简单的验证码
2019/01/21 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
2019/11/07 Python
利用Python实现Excel的文件间的数据匹配功能
2020/06/16 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
浅谈盘点5种基于Python生成的个性化语音方法
2021/02/05 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
python中if嵌套命令实例讲解
2021/02/25 Python
英国在线自行车商店:Evans Cycles
2016/09/26 全球购物
Lookfantastic德国官网:英国知名美妆购物网站
2017/06/11 全球购物
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
优秀教师事迹简介
2014/02/02 职场文书
设计专业自荐信
2014/06/19 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
国情备忘录观后感
2015/06/04 职场文书
创业计划书之淘宝网店
2019/10/08 职场文书
JavaScript 对象创建的3种方法
2021/11/17 Javascript
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技