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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
Python中生成器和yield语句的用法详解
Apr 17 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
Python 正则表达式入门(中级篇)
Dec 07 Python
python数据结构之线性表的顺序存储结构
Sep 28 Python
在python中实现对list求和及求积
Nov 14 Python
python 将字符串完成特定的向右移动方法
Jun 11 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Python通过Manager方式实现多个无关联进程共享数据的实现
Nov 07 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
教你使用Pandas直接核算Excel中快递费用
May 12 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之规范编程命名小结
2013/05/15 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
php微信开发之关键词回复功能
2018/06/13 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
2020/02/29 PHP
几个有趣的Javascript Hack
2010/07/24 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
js验证模型自我实现的具体方法
2013/06/21 Javascript
JavaScript检查某个function是否是原生代码的方法
2014/08/20 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
jQuery学习笔记之2个小技巧
2015/01/19 Javascript
javascript截取字符串小结
2015/04/28 Javascript
在JavaScript中操作时间之getYear()方法的使用教程
2015/06/11 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
2015/09/24 Javascript
js省市县三级联动效果实例
2020/04/15 Javascript
JavaScript 实现的checkbox经典实例分享
2016/10/16 Javascript
基于vue.js实现侧边菜单栏
2017/03/20 Javascript
js Dom实现换肤效果
2017/10/21 Javascript
vue-rx的初步使用教程
2018/09/21 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
优雅的使用javascript递归画一棵结构树示例代码
2019/09/22 Javascript
微信小程序实现倒计时功能
2020/11/19 Javascript
使用Python的Scrapy框架编写web爬虫的简单示例
2015/04/17 Python
Python实现的朴素贝叶斯分类器示例
2018/01/06 Python
python实现根据指定字符截取对应的行的内容方法
2018/10/23 Python
python3 自动识别usb连接状态,即对usb重连的判断方法
2019/07/03 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
解决Python列表字符不区分大小写的问题
2019/12/19 Python
django queryset相加和筛选教程
2020/05/18 Python
Python读取Excel一列并计算所有对象出现次数的方法
2020/09/04 Python
印度在线杂货店:bigbasket
2018/08/23 全球购物
写自荐信有哪些不宜?
2013/10/17 职场文书
新任教师自我鉴定
2014/02/24 职场文书
校园运动会广播稿
2014/10/06 职场文书
平凡的世界读书笔记
2015/06/25 职场文书
金榜题名主持词
2015/07/02 职场文书
毕业典礼致辞
2015/07/29 职场文书