在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实现bitmap数据结构详解
Feb 17 Python
python操作mongodb根据_id查询数据的实现方法
May 20 Python
横向对比分析Python解析XML的四种方式
Mar 30 Python
python实现折半查找和归并排序算法
Apr 14 Python
基于Python中单例模式的几种实现方式及优化详解
Jan 09 Python
python判断一个集合是否为另一个集合的子集方法
May 04 Python
Tensorflow使用支持向量机拟合线性回归
Sep 07 Python
Python3自动签到 定时任务 判断节假日的实例
Nov 13 Python
python ddt数据驱动最简实例代码
Feb 22 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
Apr 27 Python
python gui开发——制作抖音无水印视频下载工具(附源码)
Feb 07 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
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
Laravel 5框架学习之向视图传送数据(进阶篇)
2015/04/08 PHP
PHP函数超时处理方法
2016/02/14 PHP
PHP读书笔记整理_结构语句详解
2016/07/01 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
jquery ajax执行后台方法
2010/03/18 Javascript
jquery提取元素里的纯文本不包含span等里的内容
2013/09/30 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
NodeJS创建最简单的HTTP服务器
2017/05/15 NodeJs
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
vue cli使用融云实现聊天功能的实例代码
2019/04/19 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[03:07]2015国际邀请赛选手档案EHOME.rOtK 是什么让他落泪?
2015/07/31 DOTA
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
使用Django Form解决表单数据无法动态刷新的两种方法
2017/07/14 Python
pandas.DataFrame.to_json按行转json的方法
2018/06/05 Python
python 以16进制打印输出的方法
2018/07/09 Python
使用python接入微信聊天机器人
2020/03/31 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
const和static readonly区别
2013/05/20 面试题
《长相思》听课反思
2014/04/10 职场文书
捐助贫困学生倡议书
2014/05/16 职场文书
一份文言文检讨书
2014/09/13 职场文书
2014七年级班主任工作总结
2014/12/05 职场文书
2016年校长新年寄语
2015/08/17 职场文书
关于环保的广播稿
2015/12/17 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
会议主持词通用版
2019/04/02 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python