一、了解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  23  4
[torch.FloatTensor of size 2x2]
"""print(variable)
"""
Variable containing:1  23  4
[torch.FloatTensor of size 2x2]
"""

注:tensor不能反向传播,variable可以反向传播。

二、Variable求梯度

Variable计算时,它会逐渐地生成计算图。这个图就是将所有的计算节点都连接起来,最后进行误差反向传递的时候,一次性将所有Variable里面的梯度都计算出来,而tensor就没有这个能力。

v_out.backward()    # 模拟 v_out 的误差反向传递print(variable.grad)    # 初始 Variable 的梯度
'''0.5000  1.00001.5000  2.0000
'''

三、获取Variable里面的数据

直接print(Variable) 只会输出Variable形式的数据,在很多时候是用不了的。所以需要转换一下,将其变成tensor形式。

print(variable)     #  Variable 形式
"""
Variable containing:1  23  4
[torch.FloatTensor of size 2x2]
"""print(variable.data)    # 将variable形式转为tensor 形式
"""1  23  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的梯度。放在中间缓存中。

主要参考:
[1] https://blog.csdn.net/liuhongkai111/article/details/81291003
[2] https://zm10.sm-tc.cn/?src=l4uLj4zF0NCIiIjRnJGdk5CYjNGckJLQl5qTk5yei9CejYuWnJOajNDHy8vGz8zO0ZeLkpM%3D&uid=f3737415e9557099fc449754849c7d19&hid=a1e29e2ae407bbcbd5945b3277d7f9e2&pos=5&cid=9&time=1544919030860&from=click&restype=1&pagetype=0020000002000408&bu=web&query=Pytorch中Variable的作用&mode=&v=1&force=true&wap=false&province=辽宁省&city=大连市&uc_param_str=dnntnwvepffrgibijbprsvdsdichei

PyTorch中Variable变量相关推荐

  1. PyTorch中Variable变量与torch.autograd.Variable

    一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...

  2. 神经网路:pytorch中Variable和view参数解析

    在PyTorch中计算图的特点总结如下: autograd根据用户对Variable的操作来构建其计算图. requires_grad variable默认是不需要被求导的,即requires_gra ...

  3. python中list函数中variables变量_如何在Python中使用变量,浅谈,Pytorch,的,Variable,方法...

    Variable的基本概念 autograd.Variable 是包的核心类.它包装了张量,并且支持几乎所有的操作.一旦你完成了你的计算, 就可以调用 .backward() 方法 来 自动计算所有的 ...

  4. Pytorch中的variable, tensor与numpy相互转化

    来源:https://blog.csdn.net/m0_37592397/article/details/88327248 1.将numpy矩阵转换为Tensor张量 sub_ts = torch.f ...

  5. python variable_PyTorch中的Variable变量详解

    一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...

  6. Pytorch:variable中grad属性和backward函数grad_variables参数的含义

    In [51]: x = t.arange(0,3, requires_grad=True,dtype=t.float) y = x**2 + x*2 z = y.sum() z.backward() ...

  7. PyTorch中的Variable类型

    1 前言 今天在学习PyTorch~ 之前在莫烦的教程中看到了Variable类型的变量,后来看PyTorch的<Deep Learning with PyTorch: A 60 Minute ...

  8. Pytorch中的Variable

    Pytorch中的Variable pytorch两个基本对象:Tensor(张量)和Variable(变量) 其中,tensor不能反向传播,variable可以反向传播. Varibale包含三个 ...

  9. R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format)、如果没有指定行标识符号,则所有的字段都会放入variable变量中

    R语言使用reshape2包的melt函数将dataframe从宽表到长表(Wide- to long-format).如果没有指定行标识符号,则所有的字段都会放入variable变量中 目录

最新文章

  1. 从存储区提供程序的数据读取器中进行读取时出错_三菱伺服控制程序写法破析...
  2. datetimepicker 基础使用/select2 基础使用
  3. iwrite提交不了作业_在云端,我们把花样作业pick起来!
  4. 西湖大学最年轻博导来了丨93年出生的他,想创造属于中国的“追光”纪录
  5. hypermesh安装包百度云_HYPERMESH11.0 64bt软件
  6. OPPO 实时数仓揭秘:从顶层设计实现离线与实时的平滑迁移
  7. 苹果绕过ID_苹果iphone绕ID教程
  8. w ndows10备份,Win10备份工具哪个最好?轻松备份会让你知道
  9. jenkins如何清缓存_Maven本地缓存清理小工具
  10. CodeIgniter 源码解读之模型
  11. 让发展中国家展示清洁能源领导力
  12. python软件是免费的吗-python免费吗
  13. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...
  14. 人机猜拳代码python_python 实现人和电脑猜拳的示例代码
  15. 自学Python:按照日期自动分类照片
  16. ChemOffice Suite 2018 18.1.2.18
  17. 二叉树(Binary Tree):先序遍历、中序遍历、后序遍历和层次遍历
  18. java date 操作_java日期操作-java Date-java Calendar-嗨客网
  19. EasyRecovery15专业电脑数据恢复黑科技软件
  20. Word中样式与样式集

热门文章

  1. 《涨知识啦32》-SBD器件中的肖特基二极管漏电流机制 (上)
  2. 301、302、303、307状态码的区别
  3. 晨读-如何增加自己的幸福感?
  4. 网络营销工具电子邮件营销_改善电子邮件营销策略的5条提示
  5. Java动态数据生成PDF文档及下载
  6. PAT 乙级 1107 老鼠爱大米
  7. 刨根问底:NLP中的曝光偏差问题的思考
  8. JavaScript 鼠标滚轮事件(实现导航栏上滚显示)
  9. Vortex Wargame通关记录——Level 1
  10. uniapp base64加密