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 相关文章推荐
在Linux上安装Python的Flask框架和创建第一个app实例的教程
Mar 30 Python
Python下Fabric的简单部署方法
Jul 14 Python
python flask实现分页效果
Jun 27 Python
详解python eval函数的妙用
Nov 16 Python
利用Pandas 创建空的DataFrame方法
Apr 08 Python
利用python GDAL库读写geotiff格式的遥感影像方法
Nov 29 Python
Python设计模式之原型模式实例详解
Jan 18 Python
不到40行代码用Python实现一个简单的推荐系统
May 10 Python
Django项目中使用JWT的实现代码
Nov 04 Python
Python如何操作docker redis过程解析
Aug 10 Python
Django mysqlclient安装和使用详解
Sep 17 Python
Python Flask实现进度条
May 11 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+MySQL的聊天室设计
2006/10/09 PHP
11个PHP 分页脚本推荐
2011/08/15 PHP
利用php递归实现无限分类 格式化数组的详解
2013/06/08 PHP
Laravel 4.2 中队列服务(queue)使用感受
2014/10/30 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
PHP生成短网址方法汇总
2016/07/12 PHP
Linux平台php命令行程序处理管道数据的方法
2016/11/10 PHP
JS 无法通过W3C验证的处理方法
2010/03/09 Javascript
JS验证邮箱格式是否正确的代码
2013/12/05 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
javascript event在FF和IE的兼容传参心得(绝对好用)
2014/07/10 Javascript
javascript中String对象的slice()方法分析
2014/12/20 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
JavaScript多态与封装实例分析
2018/07/27 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
使用Vue.observable()进行状态管理的实例代码详解
2019/05/26 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
python合并文本文件示例
2014/02/07 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
Windows下Python3.6安装第三方模块的方法
2018/11/22 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
python 在threading中如何处理主进程和子线程的关系
2020/04/25 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
英国和国际包裹递送:ParcelCompare
2019/08/26 全球购物
售后主管岗位职责
2013/12/08 职场文书
职业生涯规划书的格式
2013/12/29 职场文书
致共产党员倡议书
2014/04/16 职场文书
创业融资计划书
2014/04/25 职场文书
房地产公司工程部经理岗位职责
2015/04/09 职场文书
毕业生捐书活动倡议书
2015/04/27 职场文书
使用CSS设置滚动条样式
2022/01/18 HTML / CSS