Pytorch之Variable与tensor--它封装了Tensor,并整合了反向传播的相关实现,像装糖果(糖果就是数据即tensor)的盒子
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)的盒子相关推荐
- 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图
转载:https://zhuanlan.zhihu.com/p/145353262 前言 本文的主要目标: 一遍搞懂反向传播的底层原理,以及其在深度学习框架pytorch中的实现机制.当然一遍搞不定两 ...
- Pytorch(5)-梯度反向传播
自动求梯度 1. 函数对自变量x求梯度--ax^2+b 2. 网络对参数w求梯度- loss(w,x) 3. 自动求梯度的底层支持--torch.autograd 3.1 Variable 3.1.1 ...
- PyTorch学习笔记(11)——论nn.Conv2d中的反向传播实现过程
0. 前言 众所周知,反向传播(back propagation)算法 (Rumelhart et al., 1986c),经常简称为backprop,它允许来自代价函数的信息通过网络向后流动,以便计 ...
- python中list函数中variables变量_如何在Python中使用变量,浅谈,Pytorch,的,Variable,方法...
Variable的基本概念 autograd.Variable 是包的核心类.它包装了张量,并且支持几乎所有的操作.一旦你完成了你的计算, 就可以调用 .backward() 方法 来 自动计算所有的 ...
- 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() ...
- Pytorch的Variable详解
pytorch两个基本对象:Tensor(张量)和Variable(变量) 其中,tensor不能反向传播,variable可以反向传播. tensor的算术运算和选取操作与numpy一样,一次你nu ...
- PyTorch中Variable变量与torch.autograd.Variable
一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...
- PyTorch中Variable变量
一.了解Variable 顾名思义,Variable就是 变量 的意思.实质上也就是可以变化的量,区别于int变量,它是一种可以变化的变量,这正好就符合了反向传播,参数更新的属性. 具体来说,在pyt ...
- 神经网路:pytorch中Variable和view参数解析
在PyTorch中计算图的特点总结如下: autograd根据用户对Variable的操作来构建其计算图. requires_grad variable默认是不需要被求导的,即requires_gra ...
最新文章
- matlab智能小车避障,Arduino智能小车系列教程4——超声波避障
- 用JavaScript 控制input的值
- spring的jar包以及相关的API文档的下载方式
- .NET Core 从 Github到 Nuget 持续集成、部署
- Spring的使用——基础环境搭建以及IOC概念理解(持续更新)
- Machine Learning - Coursera week6 Evaluating a learning algorithm
- 怎么计算末年某月某天有几个星期天公司
- 5种你未必知道的JavaScript和CSS交互的方法
- 设置环境变量的三种方法【转载】
- Skywalking-09:OAL原理——如何通过动态生成的Class类保存数据
- 图像处理 基于Visual C++编程 学习笔记 (3)显示灰度图像和二值化图像
- Vue3.0 + Ts 项目框架搭建二:路由 Router
- 分布式日志收集系统: Facebook Scribe之配置文件
- 2.泡妞与设计模式(三) 外观模式
- 基于mAppWidget实现手绘地图--索引DEMO
- VBA Mid()函数 截取字符串 - VBA函数学习笔记(一)
- java 工作簿_将多个Excel工作簿合并到一个工作簿中
- u-boot编译构成之 MLO(2)
- 【OpenGL】图片的像素和分辨率
- 【Unity-讲座笔记】江毅冰:从游戏到实时电影