Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何用pytorch打印出隐藏层梯度

如何用pytorch打印出隐藏层梯度

原创
作者头像
我爱自然语言处理
发布于 2018-05-31 15:07:39
发布于 2018-05-31 15:07:39
12K10
代码可运行
举报
文章被收录于专栏:我的python我的python
运行总次数:0
代码可运行

我们在训练神经网络时, 有时会发现自己的网络学习不到东西,loss不下降或者下降很慢,这时除了检查修改学习率以外还有可能是碰见了梯度消失的问题。检查是否发生梯度消失最好的方法其实就是将梯度值打印出来,这里就讲讲如何在pytorch中打印出隐藏层的参数。

利用pytorch中register_hook函数可以打印出梯度,下面官方文档对这个函数的例子:

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
>>> v = Variable(torch.Tensor([0, 0, 0]), requires_grad=True)
>>> h = v.register_hook(lambda grad: grad * 2)  # double the gradient
>>> v.backward(torch.Tensor([1, 1, 1]))
>>> v.grad.data

在这个例子中,v是输入,这里计算的是v的梯度。如果要打印出隐藏层的梯度,则v应该是隐藏层的参数。那么接下来就是要选择出需要打印梯度的那一层的参数。

代码语言:python
代码运行次数:0
运行
AI代码解释
复制
for item in net.named_parameters():
    if item[0] == 'fc.2.fc.weight':
        h = item[1].register_hook(lambda grad: print(grad))

net是之前建立的网络。net.named_parameters()方法返回的是一个tuple, 即(name_str, parameters)。通过name_str来选择打印哪一层的参数,再对parameters调用register_hook方法即可打印出该层参数。在这里我打印的是第二个全连接层的参数的梯度。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
很实用,学习了,python真的是很强大
很实用,学习了,python真的是很强大
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
PyTorch 基础篇(1):Pytorch 基础
第一个是官网教程:WELCOME TO PYTORCH TUTORIALS,特别是官网的六十分钟入门教程 DEEP LEARNING WITH PYTORCH: A 60 MINUTE BLITZ。
Twcat_tree
2023/12/07
2470
Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出[通俗易懂]
【2】pytorch改动和.data和.detch()问题:https://blog.csdn.net/dss_dssssd/article/details/83818181
全栈程序员站长
2022/11/17
1.9K0
Pytorch_hook机制的理解及利用register_forward_hook(hook)中间层输出[通俗易懂]
pytorch 学习笔记(一)
pytorch是一个动态的建图的工具。不像Tensorflow那样,先建图,然后通过feed和run重复执行建好的图。相对来说,pytorch具有更好的灵活性。 编写一个深度网络需要关注的地方是:
ke1th
2018/01/02
1.7K0
pytorch和tensorflow的爱恨情仇之定义可训练的参数
之前我们就已经了解了pytorch和tensorflow中的变量,本节我们深入了解可训练的参数-变量
西西嘛呦
2020/10/10
8450
pytorch和tensorflow的爱恨情仇之定义可训练的参数
【动手学深度学习笔记】之对模型参数的访问、初始化和共享
在创建的过程中,并没有可见的进行参数初始化的过程,因为这里使用了默认的方式进行了初始化参数。
树枝990
2020/08/19
8870
半小时学会 PyTorch Hook
提到 hook,我首先想起的是动画《小飞侠》里滑稽的 captain hook,满满童年的回忆促使我 P 了张题图:虎克船长勾着 PyTorch 的 logo。同时想起的还有大名鼎鼎的胡克定律:Hooke's law(虽然不是一个 hook),当年上物理实验课,看着弹簧测力计下面的钩子,联想到胡克被牛顿爵士打压的悲惨一生,不由发出既生胡何生牛的唏嘘……然而本文将介绍的是 PyTorch 中的 hook。
SIGAI学习与实践平台
2019/07/30
4.1K1
半小时学会 PyTorch Hook
pytorch学习笔记(七):pytorch hook 和 关于pytorch backward过程的理解
ke1th
2018/01/02
3.5K0
PyTorch Trick集锦
Keras有一个简洁的API来查看模型的每一层输出尺寸,这在调试网络时非常有用。现在在PyTorch中也可以实现这个功能。
zenRRan
2020/09/04
6750
pytorch中autograd以及hook函数详解
有些公式为图片,如果这个页面加载不出来,请看这里:https://oldpan.me/archives/pytorch-autograd-hook
老潘
2018/05/14
3.4K4
pytorch中autograd以及hook函数详解
教程 | 从头开始了解PyTorch的简单实现
选自GitHub 机器之心编译 参与:路 本教程展示了如何从了解张量开始到使用 PyTorch 训练简单的神经网络,是非常基础的 PyTorch 入门资源。PyTorch 建立在 Python 和 Torch 库之上,并提供了一种类似 Numpy 的抽象方法来表征张量(或多维数组),它还能利用 GPU 来提升性能。本教程的代码并不完整,详情请查看原 Jupyter Notebook 文档。 PyTorch 使入门深度学习变得简单,即使你这方面的背景知识不太充足。至少,知道多层神经网络模型可视为由权重连接的节
机器之心
2018/05/08
3K0
教程 | 从头开始了解PyTorch的简单实现
PyTorch Tricks 集锦
设置当前使用的GPU设备仅为0号设备,设备名称为 /gpu:0: os.environ["CUDA_VISIBLE_DEVICES"] = "0"
Python数据科学
2019/11/12
5480
Pytorch 最全入门介绍,Pytorch入门看这一篇就够了
本文通过详细且实践性的方式介绍了 PyTorch 的使用,包括环境安装、基础知识、张量操作、自动求导机制、神经网络创建、数据处理、模型训练、测试以及模型的保存和加载。
TechLead
2023/10/21
6.6K0
Pytorch 最全入门介绍,Pytorch入门看这一篇就够了
在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新
为什么我们要控制梯度流?这个答案有很多个,但是都可以归结为避免不需要更新的模型模块被参数更新。 我们在深度模型训练过程中,很可能存在多个loss,比如GAN对抗生成网络,存在G_loss和D_loss,通常来说,我们通过D_loss只希望更新判别器(Discriminator),而生成网络(Generator)并不需要,也不能被更新;生成网络只在通过G_loss学习的情况下,才能被更新。这个时候,如果我们不控制梯度流,那么我们在训练D_loss的时候,我们的前端网络Generator和CNN难免也会被一起训练,这个是我们不期望发生的。
狼啸风云
2021/03/30
7.9K0
在pytorch中停止梯度流的若干办法,避免不必要模块的参数更新
PyTorch常用代码段合集
本文是PyTorch常用代码段合集,涵盖基本配置、张量处理、模型定义与操作、数据处理、模型训练与测试等5个方面,还给出了多个值得注意的Tips,内容非常全面。
小白学视觉
2022/02/14
1.2K0
PyTorch常用代码段合集
PyTorch的简单实现
PyTorch 的关键数据结构是张量,即多维数组。其功能与 NumPy 的 ndarray 对象类似,如下我们可以使用 torch.Tensor() 创建张量。如果你需要一个兼容 NumPy 的表征,或者你想从现有的 NumPy 对象中创建一个 PyTorch 张量,那么就很简单了。
代码的路
2022/06/18
2K0
PyTorch的简单实现
pytorch实用工具总结
模型的计算图:def print_autograd_graph():或者参见tensorboad
lujohn3li
2020/03/04
4450
PyTorch 小课堂!一篇看懂核心网络模块接口
小伙伴们大家好呀~前面的文章中(PyTorch 小课堂开课啦!带你解析数据处理全流程(一)、PyTorch 小课堂!带你解析数据处理全流程(二)),我们介绍了数据处理模块。而当我们解决了数据处理部分,接下来就需要构建自己的网络结构,从而才能将我们使用数据预处理模块得到的 batch data 送进网络结构当中。接下来,我们就带领大家一起再认识一下 PyTorch 中的神经网络模块,即 torch.nn。本文主要对 nn.Module 进行剖析。感兴趣的小伙伴快点往下看吧!
OpenMMLab 官方账号
2022/05/25
1K0
PyTorch 小课堂!一篇看懂核心网络模块接口
PyTorch专栏(二)
autograd 包是 PyTorch 中所有神经网络的核心。首先让我们简要地介绍它,然后我们将会去训练我们的第一个神经网络。该 autograd 软件包为 Tensors 上的所有操作提供自动微分。它是一个由运行定义的框架,这意味着以代码运行方式定义你的后向传播,并且每次迭代都可以不同。我们从 tensor 和 gradients 来举一些例子。
磐创AI
2019/09/05
1.1K0
PyTorch专栏(二)
【深度学习】翻译:60分钟入门PyTorch(二)——Autograd自动求导
原文翻译自:Deep Learning with PyTorch: A 60 Minute Blitz
黄博的机器学习圈子
2021/02/12
1.6K0
【深度学习】翻译:60分钟入门PyTorch(二)——Autograd自动求导
PyTorch Tricks 集锦
设置当前使用的GPU设备仅为0号设备,设备名称为 /gpu:0: os.environ["CUDA_VISIBLE_DEVICES"] = "0"
Datawhale
2019/10/09
5930
PyTorch Tricks 集锦
相关推荐
PyTorch 基础篇(1):Pytorch 基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验