【pytorch】requires_grad、volatile、no_grad()==>节点不保存梯度,即不进行反向传播
requires_grad
Variable变量的requires_grad的属性默认为False,若一个节点requires_grad被设置为True,那么所有依赖它的节点的requires_grad都为True。
x=Variable(torch.ones(1))
w=Variable(torch.ones(1),requires_grad=True)
y=x*w
x.requires_grad,w.requires_grad,y.requires_grad
Out[23]: (False, True, True)
y依赖于w,w的requires_grad=True,因此y的requires_grad=True (类似or操作)
volatile
volatile=True是Variable的另一个重要的标识,它能够将所有依赖它的节点全部设为volatile=True,其优先级比requires_grad=True高。因而volatile=True的节点不会求导,即使requires_grad=True,也不会进行反向传播,对于不需要反向传播的情景(inference,测试推断),该参数可以实现一定速度的提升,并节省一半的显存,因为其不需要保存梯度
前方高能预警:如果你看完了前面volatile,请及时把它从你的脑海中擦除掉,因为
UserWarning: volatile was removed (Variable.volatile is always False)
该属性已经在0.4版本中被移除了,并提示你可以使用with torch.no_grad()代替该功能
>>> x = torch.tensor([1], requires_grad=True)
>>> with torch.no_grad():
... y = x * 2
>>> y.requires_grad
False
>>> @torch.no_grad()
... def doubler(x):
... return x * 2
>>> z = doubler(x)
>>> z.requires_grad
False
即使一个tensor(命名为x)的requires_grad = True,由x得到的新tensor(带有with torch.no_grad())(命名为w-标量)requires_grad也为False,且grad_fn也为None,即不会对w求导。
x = torch.randn(10, 5, requires_grad = True)
y = torch.randn(10, 5, requires_grad = True)
z = torch.randn(10, 5, requires_grad = True)
with torch.no_grad():w = x + y + zprint(w.requires_grad)print(w.grad_fn)
print(w.requires_grad)False
None
False
pytorch笔记:06)requires_grad和volatile_Javis486的专栏-CSDN博客
链接:https://www.jianshu.com/p/1cea017f5d11
【pytorch】requires_grad、volatile、no_grad()==>节点不保存梯度,即不进行反向传播相关推荐
- 机器学习入门(14)— 神经网络学习整体流程、误差反向传播代码实现、误差反向传播梯度确认、误差反向传播使用示例
1. 神经网络学习整体流程 神经网络学习的步骤如下所示. 前提 神经网络中有合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为学习.神经网络的学习分为下面 4 个步骤. 步骤1(mini-ba ...
- 详解Pytorch中的requires_grad、叶子节点与非叶子节点、with torch.no_grad()、model.eval()、model.train()、BatchNorm层
requires_grad requires_grad意为是否需要计算梯度 使用backward()函数反向传播计算梯度时,并不是计算所有tensor的梯度,只有满足下面条件的tensor的梯度才会被 ...
- 损失函数与优化器理解+【PyTorch】在反向传播前为什么要手动将梯度清零?optimizer.zero_grad()
目录 回答一: 回答二: 回答三: 传统的训练函数,一个batch是这么训练的: 使用梯度累加是这么写的: 回答一: 一句话,用来更新和计算影响模型训练和模型输出的网络参数,使其逼近或达到最优值,从而 ...
- 【深度学习理论】一文搞透pytorch中的tensor、autograd、反向传播和计算图
转载:https://zhuanlan.zhihu.com/p/145353262 前言 本文的主要目标: 一遍搞懂反向传播的底层原理,以及其在深度学习框架pytorch中的实现机制.当然一遍搞不定两 ...
- 十八、梯度下降与反向传播
1. 损失函数和梯度 1.1 损失函数的概念 对于给定的输入xxx,由f(x)f(x)f(x)给出相应的输出,这个实际输出值和原先预期值Y可能不一致,所以需要定义一个损失函数(LossFunction ...
- php梯度区间计算,快速计算梯度的魔法--反向传播算法
2.1 计算梯度的数值方法 第一次实验我留的一个课后作业里问你是否能够想出一个求解梯度的办法,其实不难想到一种简单的办法就是使用"数值法"计算梯度. 办法很简单,就是对于损失函数中 ...
- Pytorch专题实战——反向传播(Backpropagation)
文章目录 1.前言 2.初识如何更新梯度 3.手动更新梯度 4.自动更新梯度 1.前言 大体分为三步: (1)前向传播,计算loss (2)计算局部梯度 (3)反向传播,用链式求导法则计算梯度 2.初 ...
- 快速计算梯度的魔法--反向传播算法
一.实验介绍 1.1 实验内容 第一次实验最后我们说了,我们已经学习了深度学习中的模型model(神经网络).衡量模型性能的损失函数和使损失函数减小的学习算法learn(梯度下降算法),还了解了训练数 ...
- 梯度反向传播(CS231n课程笔记翻译)
CS231n课程笔记翻译:反向传播笔记 - 杜客的文章 - 知乎 译者注:本文智能单元首发,译自斯坦福CS231n课程笔记Backprop Note,课程教师Andrej Karpathy授权翻译.本 ...
最新文章
- 【渝粤教育】电大中专常见病药物治疗 (2)作业 题库
- 孙叫兽进阶之路之软件测试基础知识
- 图片优化_网站里的图片应该如何优化
- 树莓派安装mosquitto提示“MOSQ_1.5” not found
- Oracle数据库安装图解
- 剑指offer——面试题35:第一个只出现一次的字符
- 流行趋势:大背景图片在网页设计的20个精彩应用
- SLAM方向国内有哪些优秀的公司?
- windows防火墙ntp服务器_Windows Server 2008 R2 NTP服务器
- fun的用法c语言,fun的用法_fun的用法
- wps怎么写分段函数_“在Excel中怎么设置分段函数?(有5个分段)“excel折线图颜色...
- zabbix 2.2.2在centos 6.3 x86_64上的安装
- UUP, Windows 11 更新机制的未来
- 由浅入深分布式(5)dubbo提供者用内网地址注册provider以及 spring boot admin client用主机名注册spring boot admin server
- 数字图像处理习题(一)
- 微软统一打补丁的服务器,明白打补丁! 微软公布2月Win10/Win8.1/Win7更新详情
- 麒麟系统挂载文件、麒麟系统挂载windows共享文件夹
- 三线表里加小短线_APA格式报告.doc
- 淘宝数据分析:利用数据细分目标客户群
- mac安装软件没权限Anywhere ---“XX” is damaged and can’t be opened. You should move it to the Trash 解决方案
热门文章
- JeeWx 捷微 2.1 发布,微信管家平台
- 【官方搭建入门】JEEWX 捷微开发环境搭建必读
- Mac配置炫酷终端以及直接预览Markdown和各类代码
- 辟谣|bitcoin core0.16.1版本没有删除区块大小限制——带你认识区块大小限制参数...
- 送给前端开发者的一份新年礼物
- svn 修改文件的二进制或文本标记
- mui初级入门教程(六)— 模板页面实现原理及多端适配指南
- C# IOCP完成端口模型(简单实用高效)
- WCF服务编程设计规范(9):中文、中英文对照、英文版资料共享下载
- 关于Struts+Spring+Hibernate的理解