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中使用item()方法遍历字典的例子
Aug 26 Python
跟老齐学Python之网站的结构
Oct 24 Python
Python中的包和模块实例
Nov 22 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
Jun 26 Python
Windows下使Python2.x版本的解释器与3.x共存的方法
Oct 25 Python
numpy中索引和切片详解
Dec 15 Python
python中将\\uxxxx转换为Unicode字符串的方法
Sep 06 Python
Python 根据日志级别打印不同颜色的日志的方法示例
Aug 08 Python
详解Python在使用JSON时需要注意的编码问题
Dec 06 Python
Tensorflow轻松实现XOR运算的方式
Feb 03 Python
python中entry用法讲解
Dec 04 Python
python Polars库的使用简介
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配置心得包含MYSQL5乱码解决
2006/11/20 PHP
discuz Passport 通行证 整合笔记
2008/06/30 PHP
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
php数组合并的二种方法
2014/03/21 PHP
php编程每天必学之验证码
2016/03/03 PHP
php 实现Hash表功能实例详解
2016/11/29 PHP
PHP使用preg_split()分割特殊字符(元字符等)的方法分析
2017/02/04 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
jQuery中选择器小问题(新人难免遇到)
2014/03/31 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
python显示天气预报
2014/03/02 Python
python简单获取本机计算机名和IP地址的方法
2015/06/03 Python
python OpenCV学习笔记实现二维直方图
2018/02/08 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
浅谈Python中重载isinstance继承关系的问题
2018/05/04 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
用Python中的turtle模块画图两只小羊方法
2019/04/09 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
python五子棋游戏的设计与实现
2019/06/18 Python
Python 如何优雅的将数字转化为时间格式的方法
2019/09/26 Python
Python Selenium XPath根据文本内容查找元素的方法
2020/12/07 Python
检测用户浏览器是否支持CSS3的方法
2009/08/29 HTML / CSS
详解HTML5 Canvas绘制时指定颜色与透明度的方法
2016/03/25 HTML / CSS
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
美国轻奢时尚购物网站:REVOLVE(支持中文)
2020/07/18 全球购物
女生抽烟检讨书
2014/10/05 职场文书
党员年终个人总结
2015/02/14 职场文书
公司行政管理制度范本
2015/08/05 职场文书
小程序实现筛子抽奖
2021/05/26 Javascript
JavaScript异步操作中串行和并行
2021/11/20 Javascript
vue如何清除浏览器历史栈
2022/05/25 Vue.js