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通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
python实现用户登陆邮件通知的方法
Jul 09 Python
浅析Python中元祖、列表和字典的区别
Aug 17 Python
python笔记:mysql、redis操作方法
Jun 28 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
Django 路由控制的实现代码
Nov 08 Python
Python实现八皇后问题示例代码
Dec 09 Python
django框架cookie和session用法实例详解
Dec 10 Python
python模拟实现斗地主发牌
Jan 07 Python
python 实现的IP 存活扫描脚本
Dec 10 Python
详解解决jupyter不能使用pytorch的问题
Feb 18 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 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 include的妙用,实现路径加密
2008/07/29 PHP
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
Laravel重写用户登录简单示例
2016/10/08 PHP
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
javascript 获取浏览器版本
2015/01/21 Javascript
本人自用的global.js库源码分享
2015/02/28 Javascript
浅谈Javascript数组的使用
2015/07/29 Javascript
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
jQuery dataTables与jQuery UI 对话框dialog的使用教程
2016/09/02 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
利用nodejs监控文件变化并使用sftp上传到服务器
2017/02/18 NodeJs
用 js 的 selection range 操作选择区域内容和图片
2017/04/18 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
详解vue在项目中使用百度地图
2019/03/26 Javascript
微信小程序select下拉框实现源码
2019/11/08 Javascript
JQuery中的常用事件、对象属性与使用方法分析
2019/12/23 jQuery
vue中对象数组去重的实现
2020/02/06 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
python实现最大优先队列
2019/08/29 Python
TensorFlow:将ckpt文件固化成pb文件教程
2020/02/11 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
python 通过 pybind11 使用Eigen加速代码的步骤
2020/12/07 Python
绝对令人的惊叹的CSS3折叠效果(3D效果)整理
2012/12/30 HTML / CSS
CSS3绘制有活力的链接下划线
2016/07/14 HTML / CSS
菲律宾优惠券网站:MetroDeal
2019/04/12 全球购物
杭州龙健科技笔试题.net部分笔试题
2016/01/24 面试题
在职研究生自我鉴定
2013/10/16 职场文书
金融专业推荐信
2013/11/14 职场文书
教师简历自我评价
2014/02/03 职场文书
2015年小学开学寄语
2015/02/27 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
用Python提取PDF表格的方法
2021/04/11 Python