在pytorch中对非叶节点的变量计算梯度实例


Posted in Python onJanuary 10, 2020

在pytorch中一般只对叶节点进行梯度计算,也就是下图中的d,e节点,而对非叶节点,也即是c,b节点则没有显式地去保留其中间计算过程中的梯度(因为一般来说只有叶节点才需要去更新),这样可以节省很大部分的显存,但是在调试过程中,有时候我们需要对中间变量梯度进行监控,以确保网络的有效性,这个时候我们需要打印出非叶节点的梯度,为了实现这个目的,我们可以通过两种手段进行。

在pytorch中对非叶节点的变量计算梯度实例

注册hook函数

Tensor.register_hook[2] 可以注册一个反向梯度传导时的hook函数,这个hook函数将会在每次计算 关于该张量 在pytorch中对非叶节点的变量计算梯度实例 的时候 被调用,经常用于调试的时候打印出非叶节点梯度。当然,通过这个手段,你也可以自定义某一层的梯度更新方法。[3] 具体到这里的打印非叶节点的梯度,代码如:

def hook_y(grad):
 print(grad)

x = Variable(torch.ones(2, 2), requires_grad=True)
y = x + 2
z = y * y * 3

y.register_hook(hook_y) 

out = z.mean()
out.backward()

输出如:

tensor([[4.5000, 4.5000],
  [4.5000, 4.5000]])

retain_grad()

Tensor.retain_grad()显式地保存非叶节点的梯度,当然代价就是会增加显存的消耗,而用hook函数的方法则是在反向计算时直接打印,因此不会增加显存消耗,但是使用起来retain_grad()要比hook函数方便一些。代码如:

x = Variable(torch.ones(2, 2), requires_grad=True)
y = x + 2
y.retain_grad()
z = y * y * 3
out = z.mean()
out.backward()
print(y.grad)

输出如:

tensor([[4.5000, 4.5000],
  [4.5000, 4.5000]])

以上这篇在pytorch中对非叶节点的变量计算梯度实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用新浪微博api上传图片到微博示例
Jan 10 Python
python模块smtplib实现纯文本邮件发送功能
May 22 Python
python requests爬取高德地图数据的实例
Nov 10 Python
Python多图片合并PDF的方法
Jan 03 Python
Python简单过滤字母和数字的方法小结
Jan 09 Python
Python实现的列表排序、反转操作示例
Mar 13 Python
pytorch 预训练层的使用方法
Aug 20 Python
基于Django框架的权限组件rbac实例讲解
Aug 31 Python
Python中的延迟绑定原理详解
Oct 11 Python
使用Python-OpenCV消除图像中孤立的小区域操作
Jul 05 Python
Python操控mysql批量插入数据的实现方法
Oct 27 Python
python解包概念及实例
Feb 17 Python
python如何获取apk的packagename和activity
Jan 10 #Python
浅谈pytorch卷积核大小的设置对全连接神经元的影响
Jan 10 #Python
python颜色随机生成器的实例代码
Jan 10 #Python
关于python pycharm中输出的内容不全的解决办法
Jan 10 #Python
Python GUI自动化实现绕过验证码登录
Jan 10 #Python
pytorch nn.Conv2d()中的padding以及输出大小方式
Jan 10 #Python
如何给Python代码进行加密
Jan 10 #Python
You might like
PHP中常见的缓存技术实例分析
2015/09/23 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
30个最佳jQuery Lightbox效果插件分享
2011/04/11 Javascript
js获取 type=radio 值的方法
2014/05/09 Javascript
jquery trigger伪造a标签的click事件取代window.open方法
2014/06/23 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
jQuery中eq()方法用法实例
2015/01/05 Javascript
使用angularjs创建简单表格
2016/01/21 Javascript
解决前端跨域问题方案汇总
2016/11/20 Javascript
Angularjs分页查询的实现
2017/02/24 Javascript
小程序实现上下移动切换位置
2019/09/23 Javascript
Layui实现数据表格默认全部显示(不要分页)
2019/10/26 Javascript
node.js使用 http-proxy 创建代理服务器操作示例
2020/02/10 Javascript
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
[52:20]DOTA2-DPC中国联赛正赛 SAG vs XGBO3 第一场 3月5日
2021/03/11 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
Python实现比较两个列表(list)范围
2015/06/12 Python
python中zip()方法应用实例分析
2016/04/16 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
python每天定时运行某程序代码
2019/08/16 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
Python3 filecmp模块测试比较文件原理解析
2020/03/23 Python
为什么称python为胶水语言
2020/06/16 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
美国折扣宠物药房:Total Pet Supply
2018/05/27 全球购物
伦敦一家领先的精品零售商:IRIS Fashion
2019/05/24 全球购物
Java语言程序设计测试题改错题部分
2014/07/22 面试题
英语专业学子个人的自我评价
2013/10/02 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
监察建议书范文
2014/03/12 职场文书
银行员工考核评语
2014/12/31 职场文书
仓库保管员岗位职责
2015/02/09 职场文书
2015年城市管理工作总结
2015/05/23 职场文书
go语言求任意类型切片的长度操作
2021/04/26 Golang
Nginx实现负载均衡的项目实践
2022/03/18 Servers