参考链接:https://www.cnblogs.com/hellcat/p/8439055.html

函数简介

torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现(tensor变成variable之后才能进行反向传播求梯度?用变量.backward()进行反向传播之后,var.grad中保存了var的梯度)

x = Variable(tensor, requires_grad = True)

Varibale包含三个属性:

  • data:存储了Tensor,是本体的数据
  • grad:保存了data的梯度,本事是个Variable而非Tensor,与data形状一致
  • grad_fn:指向Function对象,用于反向传播的梯度计算之用

用法:

import torch
from torch.autograd import Variablex = Variable(torch.one(2,2), requires_grad = True)
print(x)#其实查询的是x.data,是个tensor

举个例子求梯度:

构建一个简单的方程:y = x[0,0] + x[0,1] + x[1,0] + x[1,1],Variable的运算结果也是Variable,但是,中间结果反向传播中不会被求导()

这和TensorFlow不太一致,TensorFlow中中间运算果数据结构均是Tensor

y = x.sum()y
"""Variable containing:4[torch.FloatTensor of size 1]
"""#可以查看目标函数的.grad_fn方法,它用来求梯度
y.grad_fn
"""<SumBackward0 at 0x18bcbfcdd30>
"""y.backward()  # 反向传播
x.grad  # Variable的梯度保存在Variable.grad中
"""Variable containing:1  11  1[torch.FloatTensor of size 2x2]
"""#grad属性保存在Variable中,新的梯度下来会进行累加,可以看到再次求导后结果变成了2,
y.backward()
x.grad  # 可以看到变量梯度是累加的
"""Variable containing:2  22  2[torch.FloatTensor of size 2x2]
"""#所以要归零
x.grad.data.zero_()  # 归零梯度,注意,在torch中所有的inplace操作都是要带下划线的,虽然就没有.data.zero()方法"""0  00  0
[torch.FloatTensor of size 2x2]
"""#对比Variable和Tensor的接口,相差无两
x = Variable(torch.ones(4, 5))y = torch.cos(x)                         # 传入Variable
x_tensor_cos = torch.cos(x.data)  # 传入Tensorprint(y)
print(x_tensor_cos)"""
Variable containing:0.5403  0.5403  0.5403  0.5403  0.54030.5403  0.5403  0.5403  0.5403  0.54030.5403  0.5403  0.5403  0.5403  0.54030.5403  0.5403  0.5403  0.5403  0.5403
[torch.FloatTensor of size 4x5]0.5403  0.5403  0.5403  0.5403  0.54030.5403  0.5403  0.5403  0.5403  0.54030.5403  0.5403  0.5403  0.5403  0.54030.5403  0.5403  0.5403  0.5403  0.5403
[torch.FloatTensor of size 4x5]
"""

pytorch中的Variable()相关推荐

  1. PyTorch中的Variable类型

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

  2. Pytorch中的Variable

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

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

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

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

    来源:https://blog.csdn.net/pengge0433/article/details/79459679 在使用pytorch作为深度学习的框架时,经常会遇到变量variable.张量 ...

  5. pytorch中的Variable还有必要使用吗?

    pytorch1.6文档 Variable 早在在pytorch0.4已经不需要了 tensor就支持autograd了 所以见到  data=Variable(data)  这样的用法请大胆删除Va ...

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

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

  7. PyTorch中Variable变量

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

  8. python variable_PyTorch中的Variable变量详解

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

  9. 『PyTorch』第五弹_深入理解autograd_中:Variable梯度探究

    查看非叶节点梯度的两种方法 在反向传播过程中非叶子节点的导数计算完之后即被清空.若想查看这些变量的梯度,有两种方法: 使用autograd.grad函数 使用hook autograd.grad和ho ...

最新文章

  1. 高速缓冲DNS相关配置详情
  2. Deformable ConvNets--Part2: Spatial Transfomer Networks(STN)
  3. windows 7 全屏游戏解决方案
  4. js中用到的正则表达式
  5. Codeforces 724C Ray Tracing 扩展欧几里得
  6. Qt5模型/视图结构-视图(View)
  7. 寄存器(cpu工作原理)
  8. 如何在Android主屏幕上添加热点快捷方式
  9. 求出2个字符串中的最大公共子串
  10. Hadoop 2.7.1 使用minicluster进行单元测试
  11. 项目管理第五章项目范围管理
  12. 怎么把html转成mp4,怎么把其他视频格式转成常用的mp4形式?
  13. Android微信通讯录界面代码,Android中使用Expandablelistview实现微信通讯录界面
  14. 把USB打印机映射到LPT端口
  15. 样本的方差的均值等于总体的方差
  16. 发票扫一扫,OCR识别功能
  17. Java: 数组、列表和集合的互相转换
  18. ET框架-16 ET框架登录账号请求逻辑编写(1)
  19. joost网络电视的速度优化技巧和邀请连接
  20. 可能是iOS上最好用的定时器,现在限时免费

热门文章

  1. 计算机现在那个专业更好
  2. ios之模拟器(一)
  3. osgi官网demo,idea整合osgi
  4. allowTransparency含义 嵌套透明
  5. 在小公司加班了3年,领导竟要优化我?最后愤而上岸阿里
  6. python快递分拣小程
  7. WAV音乐档格式(一)
  8. 【GRUB】GRUB2基本操作
  9. 求由一种特殊递推关系决定的数列通项
  10. wdcdn系统一套基于Linux的CDN管理系统