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

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

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

>>> 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应该是隐藏层的参数。那么接下来就是要选择出需要打印梯度的那一层的参数。

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方法即可打印出该层参数。在这里我打印的是第二个全连接层的参数的梯度。

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

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人工智能LeadAI

TensorFlow Tutorial-1

1、Why TensorFlow? 网上有关介绍太多了,我就不多说了,这里主要注重使用。 ? Intro.PNG ? github.PNG 2、Programi...

390110
来自专栏weixuqin 的专栏

深度学习之 TensorFlow(二):TensorFlow 基础知识

39550
来自专栏程序生活

Leetcode-Easy 887. Projection Area of 3D Shapes

当时自己没有想到好办法,就是按部就班的分别求三个面的面积,注意求xy的面积的时候需要考虑grid[i][j]值是否为0

10620
来自专栏奇点大数据

再免费多看一章--k-means++

在k-means算法里开始选取的聚类中点是随机的,每次都会照成不同的聚类结果。有一个解决方案叫做k-means++,可以有效的选择初始聚类中心点。参考 http...

30170
来自专栏FD的专栏

10种深度学习算法的TensorFlow实现

这个 repository 是使用 TensorFlow 库实现的多种深度学习算法的实现。这个软件包的目标是作为一种命令行实用程序——你可以将其用来快速训练和评...

18340
来自专栏me的随笔

JavaScript 随机数

JavaScript内置函数random(seed)可以产生[0,1)之间的随机数,若想要生成其它范围的随机数该如何做呢?

15560
来自专栏算法channel

动态规划|约束条件下的三角最短路径

这篇文章总结了题目如何符合动态规划的特点,进而如何利用动态规划求解三角约束条件下的最短路径。 1 题目 Given a triangle, find the m...

42550
来自专栏码云1024

编程英语之KNN算法

16940
来自专栏Petrichor的专栏

Selective Search (选择搜索)

[1] Selective Search for Object Recognition [2] Computer vision seminar, 5/2/2...

97120
来自专栏深度学习那些事儿

Pytorch中Tensor与各种图像格式的相互转化

在pytorch中经常会遇到图像格式的转化,例如将PIL库读取出来的图片转化为Tensor,亦或者将Tensor转化为numpy格式的图片。而且使用不同图像处理...

4.9K60

扫码关注云+社区

领取腾讯云代金券