在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删除空文件和空文件夹的方法
Jul 14 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
Python 爬虫学习笔记之正则表达式
Sep 21 Python
Python实现的拟合二元一次函数功能示例【基于scipy模块】
May 15 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
Python使用POP3和SMTP协议收发邮件的示例代码
Apr 16 Python
python的re模块使用方法详解
Jul 26 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
Jan 06 Python
python3.6使用SMTP协议发送邮件
May 20 Python
python爬虫之selenium库的安装及使用教程
May 23 Python
用Python可视化新冠疫情数据
Jan 18 Python
Python+pyaudio实现音频控制示例详解
Jul 23 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
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
Yii框架实现邮箱激活的方法【数字签名】
2016/10/18 PHP
php微信开发之百度天气预报
2016/11/18 PHP
laravel框架添加数据,显示数据,返回成功值的方法
2019/10/11 PHP
JQuery入门——用bind方法绑定事件处理函数应用介绍
2013/02/05 Javascript
Jquery 类网页微信二维码图块滚动效果具体实现
2013/10/14 Javascript
jQuery操作select下拉框的text值和value值的方法
2014/05/31 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
快速学习JavaScript的6个思维技巧
2015/10/13 Javascript
javascript省市区三级联动下拉框菜单实例演示
2015/11/29 Javascript
使用基于Node.js的构建工具Grunt来发布ASP.NET MVC项目
2016/02/15 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
2017/01/10 Javascript
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
小程序卡片切换效果组件wxCardSwiper的实现
2020/02/13 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
朴素贝叶斯算法的python实现方法
2014/11/18 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
python中 logging的使用详解
2017/10/25 Python
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
详解python 降级到3.6终极解决方案
2020/02/06 Python
使用jupyter Nodebook查看函数或方法的参数以及使用情况
2020/04/14 Python
python3跳出一个循环的实例操作
2020/08/18 Python
python 基于wx实现音乐播放
2020/11/24 Python
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
运动会通讯稿50字
2014/01/30 职场文书
服务承诺书怎么写
2014/05/24 职场文书
民间借贷被告代理词
2015/05/23 职场文书
公司业务员管理制度
2015/08/05 职场文书
《画家和牧童》教学反思
2016/02/17 职场文书
《迟到》教学反思
2016/02/24 职场文书
毕业欢送晚会主持词
2019/06/25 职场文书
pytorch实现线性回归以及多元回归
2021/04/11 Python
详解MySQL的主键查询为什么这么快
2022/04/03 MySQL