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程序的循环的运行效率的原因
Apr 01 Python
Python的语言类型(详解)
Jun 24 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
面向初学者的Python编辑器Mu
Oct 08 Python
Python中的异常处理try/except/finally/raise用法分析
Feb 28 Python
完美解决python3.7 pip升级 拒绝访问问题
Jul 12 Python
Python实现直方图均衡基本原理解析
Aug 08 Python
用Python实现二叉树、二叉树非递归遍历及绘制的例子
Aug 09 Python
Python实现多线程/多进程的TCP服务器
Sep 03 Python
python的launcher用法知识点总结
Aug 07 Python
Python3如何在服务器打印资产信息
Aug 27 Python
详解如何用Python实现感知器算法
Jun 18 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中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
YII2框架中excel表格导出的方法详解
2017/07/21 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
如何实现浏览器上的右键菜单
2006/07/10 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
jQuery插件开发精品教程(让你的jQuery更上一个台阶)
2015/11/07 Javascript
关于javascript中限定时间内防止按钮重复点击的思路详解
2016/08/16 Javascript
JS匹配日期和时间的正则表达式示例
2017/05/12 Javascript
React.Js添加与删除onScroll事件的方法详解
2017/11/03 Javascript
vue注册组件的几种方式总结
2018/03/08 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
react 生命周期实例分析
2020/05/18 Javascript
python3图片转换二进制存入mysql
2013/12/06 Python
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
浅谈Python NLP入门教程
2017/12/25 Python
深入浅析Python 中的sklearn模型选择
2019/10/12 Python
python3图片文件批量重命名处理
2019/10/31 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
使用Python中tkinter库简单gui界面制作及打包成exe的操作方法(二)
2020/10/12 Python
使用python对excel表格处理的一些小功能
2021/01/25 Python
新加坡网上化妆品店:Best Buy World
2018/05/18 全球购物
白俄罗斯在线大型超市:e-dostavka.by
2019/07/25 全球购物
Linux Interview Questions For software testers
2013/05/17 面试题
电子商务助理求职自荐信
2014/04/10 职场文书
《海底世界》教学反思
2014/04/16 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
看上去很美观后感
2015/06/10 职场文书
教师见习总结范文
2015/06/23 职场文书
2016学校元旦晚会经典开场白台词
2015/12/03 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技
Vertica集成Apache Hudi重磅使用指南
2022/03/31 Servers