一、了解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. 基于matlab fdma传输系统设计,基于MATLAB的LTE系统仿真研究
  2. 单击GridView控件,高亮单击所在的记录行
  3. Shell脚本实战之文件批量创建和修改
  4. Programming Computer Vision with Python (学习笔记一)
  5. windows10 ipv4设置两个(多个)网段同时连接(多网段、双网段)
  6. 在对人的管理上,项目经理应该做些什么?
  7. Python in worker has different version 3.7 than that in driver 3.6
  8. Github的简单使用
  9. centos 6.5 rsync+inotify 实时同步
  10. ffmpeg将sdp转发_ffmpeg常用命令
  11. windows快速关闭有效方法2则
  12. 更新k8s镜像版本的三种方式
  13. Android Scroller类的详细分析
  14. do...while(); 语句在宏定义中的应用。
  15. input隐藏边框和选中样式
  16. github上比较好用的第三方库
  17. 工作后的5种放松方法
  18. 为快乐工作而生的协同办公管理平台——IBOS!
  19. 攻防世界之Miscellaneous-300
  20. 基于jsp+mysql+Spring+SpringMVC+mybatis的爱康医院专家预约管理系统

热门文章

  1. 〖Python语法进阶篇⑤〗 - 进程间的通信
  2. 精密划片机行业发展趋势
  3. matlab prefourier,用matlab求单位阶跃函数的傅立叶变换fourier变换
  4. 读《远见:如何规划职业生涯3大阶段》
  5. 防火墙DNS功能在配置防火墙策略中的应用
  6. 郑渊洁:我从1995年起就不信任一些疫苗
  7. 线性代数1.2行列式的性质
  8. 73、DisCoScene: Spatially Disentangled Generative Radiance Fields for Controllable 3D-aware Scene Syn
  9. 玉溪计算机专业,保山3d设计师培训班
  10. TWS 耳机十九大蓝牙主芯片公司!