一、了解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 variable_PyTorch中的Variable变量详解相关推荐

  1. 站长在线Python精讲:在Python函数中的默认参数详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中的默认参数详解>.本文的主要内容有:默认参数的概念和默认参数的示例.默认参数不能设置可变对象. 目录 1 ...

  2. 站长在线Python精讲:在Python函数中参数传递的位置参数详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中参数传递的位置参数详解>.本文的主要内容有:实参和形参数量必须与定义时一致和实参和形参位置必须与定义时一 ...

  3. 站长在线Python教程精讲:在Python函数中的关键字参数详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python函数中的关键字参数详解>.本文的主要内容有:关键字参数的含义和关键字参数的应用举例. 目录 1.关键字参数的含 ...

  4. python getattr_Python中的getattr()函数详解:

    标签:Python中的getattr()函数详解: getattr(object, name[, default]) -> value Get a named attribute from an ...

  5. Python机器学习中的数学原理详解(补充勘误表)

    数学是机器学习和数据科学的基础,任何期望涉足相关领域并切实领悟具体技术与方法的人都无法绕过数学这一关.在一篇题为<放弃幻想,搞AI必须过数学关>的网文中,作者一针见血地指出想从事AI相关工 ...

  6. python getattr_Python中的getattr()函数详解

    最近看Dive into python第四章自省中提到getattr()函数,作为一个内建函数平时自己没怎么用过所以也不太理解这个函数的一些用法 看了下函数本身的doc getattr(object, ...

  7. C++中的引用变量详解

    文章目录 声明及定义 代码 引用变量的特点 图片解释 引用变量的本质 引用变量的用途 int & 和 const int & 的区别 引用变量和宏定义(#define)的区别 声明及定 ...

  8. python正则表达式中的转义字符_详解python中正则表达式的反斜线的转义功能

    最近深入研读了正则表达式的一本经典著作,对于在python中使用正则表达式时使用反斜线转义功能时有些心得,特与大家分享. 核心思想:在python中使用正则表达式时要切记反斜线具有两层转义功能,如果你 ...

  9. python 闭包中的匿名函数详解!

    匿名函数 孔子曰:温故而知新,可以为师矣. 天若有情天亦老,人间正道是沧桑. Python–lambda表达式 lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就 ...

最新文章

  1. C++文件输入和输出
  2. BZOJ 2038: [2009国家集训队]小Z的袜子(莫队算法例题)
  3. python修改指定行,python读取文件的指定行并修改
  4. .NET Core 下使用 Exceptionless 记录日志
  5. python读txt转array_python将txt文件读入为np.array的方法
  6. MINIGUI图形界面开发入门,交叉编译,移植
  7. 随想录(skyeye中的soc仿真)
  8. 遍历聚合对象中的元素——迭代器模式(四)
  9. linux服务器数据库和监听自启动,linux64的神通数据库安装与启动
  10. 【信息系统项目管理师】第10章 上篇-项目沟通管理 知识点详细整理
  11. mac remix导入本地项目
  12. C语言题目:从键盘输入三个数,求三角形面积和周长
  13. 最新版微型商城2.0版网站源码 带有一键安装
  14. 黄色光纤跳线、橙色光纤跳线、蓝色光纤跳线区别
  15. R语言和Python实现分数次幂微积分计算(主要是Python)
  16. Laravel开发的一元交友盲盒源码存取小纸条盲盒交友匹配交友趣味交友同城交友流量
  17. 谈谈优惠券系统的设计
  18. oracle中的表别名怎么,Oracle 表别名
  19. VRChat火了,但VR社交还没迎来最好的时代
  20. C++实现简单的五子棋程序

热门文章

  1. OpenNMS全接触-事件及通知(九)
  2. Apache配置SSL证书服务器傻瓜步骤
  3. 在微型计算机中 如果电源突然中断,微型计算机在工作中电源突然中断,则其中的信息全部丢失,再次通电后也不能恢复的..._考试资料网...
  4. Flask 第三方组件之 script
  5. JavaScript中的正则
  6. python之用循环实现五子棋小程序
  7. 申请评分卡(A卡)的开发过程(1)
  8. 列的数目比列的名字要多_你们要的甘特图来啦!还有具体做法哦!
  9. python实现Redis订阅发布
  10. 电子计算机可直接执行的指令机器内部是以,电子计算机可直接执行的指令在机器内部是以( )表示....