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静态方法实例
Jan 14 Python
python简易远程控制单线程版
Jun 20 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
python实现弹跳小球
May 13 Python
python实现大文件分割与合并
Jul 22 Python
python使用协程实现并发操作的方法详解
Dec 27 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
python如何对链表操作
Oct 10 Python
Django实现随机图形验证码的示例
Oct 15 Python
python opencv实现直线检测并测出倾斜角度(附源码+注释)
Dec 31 Python
python爬虫scrapy基本使用超详细教程
Feb 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性能优化准备篇图解PEAR安装
2011/12/05 PHP
解析php中memcache的应用
2013/06/18 PHP
PHP json_decode函数详细解析
2014/02/17 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
2018/06/16 PHP
基于laravel-admin 后台 列表标签背景的使用方法
2019/10/03 PHP
JavaScript中的事件处理
2008/01/16 Javascript
javaScript 判断字符串是否为数字的简单方法
2009/07/25 Javascript
基于jquery的$.ajax async使用
2011/10/19 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
HTML页面滚动时获取离页面顶部的距离2种实现方法
2013/09/05 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
JavaScript记录光标在编辑器中位置的实现方法
2016/04/22 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
vue页面跳转后返回原页面初始位置方法
2018/02/11 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
详解小程序开发经验:多页面数据同步
2019/05/18 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
js图数据结构处理 迪杰斯特拉算法代码实例
2019/09/11 Javascript
javascript 函数的暂停和恢复实例详解
2020/04/25 Javascript
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Python requests发送post请求的一些疑点
2018/05/20 Python
Python使用dict.fromkeys()快速生成一个字典示例
2019/04/24 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
JACK & JONES英国官方网站:欧洲领先的男装生产商
2017/09/27 全球购物
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
临床医师专业个人自我评价
2014/01/08 职场文书
公司门卫岗位职责
2014/03/15 职场文书
国贸专业求职信
2014/06/28 职场文书
财务会计实训报告
2014/11/05 职场文书
校运会新闻稿
2015/07/17 职场文书
当你找不到方向的时候,不妨读读刘备的一生
2019/08/05 职场文书
CSS 新特性 contain控制页面的重绘与重排问题
2021/04/30 HTML / CSS
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python