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统计一个文本中重复行数的方法
Nov 19 Python
在Python的Django框架中包装视图函数
Jul 20 Python
Python中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
Nov 10 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
Python一行代码实现快速排序的方法
Apr 30 Python
Python字符串的修改方法实例
Dec 19 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
使用Keras预训练模型ResNet50进行图像分类方式
May 23 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
关于 Python json中load和loads区别
Nov 07 Python
Python学习之异常中的finally使用详解
Mar 16 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 Socket 编程
2010/04/09 PHP
ThinkPHP 3使用OSS的方法
2018/07/19 PHP
jquery的颜色选择插件实例代码
2008/10/02 Javascript
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
兼容主流浏览器的jQuery+CSS 实现遮罩层的简单代码
2014/10/14 Javascript
通过JS判断联网类型和连接状态的实现代码
2015/04/01 Javascript
jquery实现图片水平滚动效果代码分享
2015/08/26 Javascript
bootstrap实现每隔5秒自动轮播效果
2016/12/20 Javascript
js学习总结之dom2级事件基础知识详解
2017/07/27 Javascript
js实现方块上下左右移动效果
2017/08/17 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
python中使用百度音乐搜索的api下载指定歌曲的lrc歌词
2014/07/18 Python
介绍Python中的一些高级编程技巧
2015/04/02 Python
Python中使用Beautiful Soup库的超详细教程
2015/04/30 Python
总结Python编程中函数的使用要点
2016/03/20 Python
python 实时遍历日志文件
2016/04/12 Python
Django入门使用示例
2017/12/12 Python
python爬取拉勾网职位数据的方法
2018/01/24 Python
使用Python轻松完成垃圾分类(基于图像识别)
2019/07/09 Python
Django 查询数据库并返回页面的例子
2019/08/12 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
Python数学形态学实例分析
2019/09/06 Python
Python udp网络程序实现发送、接收数据功能示例
2019/12/09 Python
Python破解BiliBili滑块验证码的思路详解(完美避开人机识别)
2020/02/17 Python
春游踏青活动方案
2014/08/14 职场文书
高中学生会竞选演讲稿
2014/08/25 职场文书
车辆年审委托书范本
2014/09/18 职场文书
北京颐和园导游词
2015/01/30 职场文书
培训督导岗位职责
2015/04/10 职场文书
学生犯错保证书
2015/05/09 职场文书
科普 | 业余无线电知识-波段篇
2022/02/18 无线电
Apache SeaTunnel实现 非CDC数据抽取
2022/05/20 Servers