tensor与Variable

pytorch两个基本对象:Tensor(张量)和Variable(变量)

其中,tensor不能反向传播,variable可以反向传播。

tensor的算术运算和选取操作与numpy一样,与numpy相似的运算操作都可以迁移过来。

variable是一种可以不断变化的变量,符合反向传播,参数更新的属性。pytorch的variable是一个存放会变化值的地理位置,里面的值会不停变化,像装糖果(糖果就是数据,即tensor)的盒子,糖果的数量不断变化。pytorch都是由tensor计算的,而tensor里面的参数是variable形式。

扩展

在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(grad_variables=None,retain_graph=None,create_graph=None)

反向传播,求解Variable的梯度。放在中间缓存中。

PyTorch 的 backward 为什么有一个 grad_variables 参数?

假设 x 经过一番计算得到 y,那么 y.backward(w) 求的不是 y 对 x 的导数,而是 l = torch.sum(y*w) 对 x 的导数。w 可以视为 y 的各分量的权重,也可以视为遥远的损失函数 l 对 y 的偏导数。也就是说,不一定需要从计算图最后的节点 y 往前反向传播,从中间某个节点 n 开始传也可以,只要你能把损失函数 l 关于这个节点的导数 dl/dn 记录下来,n.backward(dl/dn) 照样能往前回传,正确地计算出损失函数 l 对于节点 n 之前的节点的导数。特别地,若 y 为标量,w 取默认值 1.0,才是按照我们通常理解的那样,求 y 对 x 的导数。

5、grad_variable

grad_variables是y求导时的梯度参数,由于autograd仅用于标量,因此当y不是标量且在声明时使用了requires_grad=True,必须指定grad_variables参数,在完成原始的反向传播之后得到的梯度会对这个grad_variables进行修正,然后将结果保存在Variable的grad中。grad_variables形状必须与Variable一致。在深度学习中求导与梯度有关,因此grad_variables一般会定义类似为[1, 0.1, 0.01, 0.001],表示梯度的方向,取较小的之不会对求导效率有影响。

1.简介

torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现

Variable和tensor的区别和联系:

1.Variable是篮子,而tensor是鸡蛋,鸡蛋应该放在篮子里才能方便拿走(定义variable时一个参数就是tensor)

2.Variable这个篮子里除了装了tensor外还有requires_grad参数,表示是否需要对其求导,默认为False

3.Variable这个篮子呢,自身有一些属性

比如grad,梯度variable.grad是d(y)/d(variable)保存的是变量y对variable变量的梯度值,如果requires_grad参数为False,所以variable.grad返回值为None,如果为True,返回值就为对variable的梯度值

比如grad_fn,对于用户自己创建的变量(Variable())grad_fn是为none的,也就是不能调用backward函数,但对于由计算生成的变量,如果存在一个生成中间变量的requires_grad为true,那其的grad_fn不为none,反则为none

比如data,这个就很简单,这个属性就是装的鸡蛋(tensor)

Varibale包含三个属性:

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

Pytorch之Variable_啧啧啧biubiu的博客-CSDN博客_pytorch的variable

Pytorch的Variable详解_Mr_zhuo_的博客-CSDN博客_variable

Pytorch之Variable与tensor--它封装了Tensor,并整合了反向传播的相关实现,像装糖果(糖果就是数据即tensor)的盒子相关推荐

  1. 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图

    转载:https://zhuanlan.zhihu.com/p/145353262 前言 本文的主要目标: 一遍搞懂反向传播的底层原理,以及其在深度学习框架pytorch中的实现机制.当然一遍搞不定两 ...

  2. Pytorch(5)-梯度反向传播

    自动求梯度 1. 函数对自变量x求梯度--ax^2+b 2. 网络对参数w求梯度- loss(w,x) 3. 自动求梯度的底层支持--torch.autograd 3.1 Variable 3.1.1 ...

  3. PyTorch学习笔记(11)——论nn.Conv2d中的反向传播实现过程

    0. 前言 众所周知,反向传播(back propagation)算法 (Rumelhart et al., 1986c),经常简称为backprop,它允许来自代价函数的信息通过网络向后流动,以便计 ...

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

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

  5. 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() ...

  6. Pytorch的Variable详解

    pytorch两个基本对象:Tensor(张量)和Variable(变量) 其中,tensor不能反向传播,variable可以反向传播. tensor的算术运算和选取操作与numpy一样,一次你nu ...

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

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

  8. PyTorch中Variable变量

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

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

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

最新文章

  1. matlab智能小车避障,Arduino智能小车系列教程4——超声波避障
  2. 用JavaScript 控制input的值
  3. spring的jar包以及相关的API文档的下载方式
  4. .NET Core 从 Github到 Nuget 持续集成、部署
  5. Spring的使用——基础环境搭建以及IOC概念理解(持续更新)
  6. Machine Learning - Coursera week6 Evaluating a learning algorithm
  7. 怎么计算末年某月某天有几个星期天公司
  8. 5种你未必知道的JavaScript和CSS交互的方法
  9. 设置环境变量的三种方法【转载】
  10. Skywalking-09:OAL原理——如何通过动态生成的Class类保存数据
  11. 图像处理 基于Visual C++编程 学习笔记 (3)显示灰度图像和二值化图像
  12. Vue3.0 + Ts 项目框架搭建二:路由 Router
  13. 分布式日志收集系统: Facebook Scribe之配置文件
  14. 2.泡妞与设计模式(三) 外观模式
  15. 基于mAppWidget实现手绘地图--索引DEMO
  16. VBA Mid()函数 截取字符串 - VBA函数学习笔记(一)
  17. java 工作簿_将多个Excel工作簿合并到一个工作簿中
  18. u-boot编译构成之 MLO(2)
  19. 【OpenGL】图片的像素和分辨率
  20. 【Unity-讲座笔记】江毅冰:从游戏到实时电影

热门文章

  1. navicat工具把SQL Server数据库转换MySQL数据库
  2. Core Audio音频基础概述
  3. MySQL数据库和Oracle数据库的区别
  4. 作业四 | 个人项目-小学四则运算 “软件”之初版
  5. c# maiform父窗体改变动态的gridew 奇偶行变色的快捷方法
  6. 大战Java虚拟机【2】—— GC策略
  7. 文件路径:/和\的区别
  8. IPv6与IPv4比较
  9. Tomcat启动项目没问题,网页一片空白
  10. 信息学奥赛一本通 1090:含k个3的数 | OpenJudge NOI 1.5 30