专栏首页我的python如何用pytorch打印出隐藏层梯度
原创

如何用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 条评论
登录 后参与评论

相关文章

  • 论文阅读笔记:GloVe: Global Vectors for Word Representation

    摘要 1.引言 2.相关工作 3.The GloVe Model 4.实验 4.1评估方法 4.2语料库和训练细节

    我爱自然语言处理
  • char-rnn 语言模型

    项目GitHub地址:https://github.com/ClownW/Char-RNN-Pytorch

    我爱自然语言处理
  • 利用随机数种子来使pytorch中的结果可以复现

    在神经网络中,参数默认是进行随机初始化的。不同的初始化参数往往会导致不同的结果,当得到比较好的结果时我们通常希望这个结果是可以复现的,在pytor...

    我爱自然语言处理
  • ACORNS:一个简单易用的渐变和粗线代码生成器(cs)

    中文摘要:从机器学习到科学计算,一阶和二阶导数的计算是许多计算应用的主要内容。我们提出了一种算法自动区分用C99代码子集编写的算法,以及它作为Python脚本的...

    用户7454091
  • 提升python项目完成效率的调试方法技巧(上)

    效率提升是极为重要的事情,我们的时间本来就不充裕,不应该过多将时间浪费在调试过程中。对于大型项目光有dubug是不够的,如果需要提高产品调试进度,必须需要采取一...

    OLDPAN
  • PHP程序员容易忽略的几点精华

    1、变量、数组的应用技巧   (1)很多人用得不多的数组函数。foreach、list、each。分别举几个例子,应该就能知道了。例:   $dat...

    wangxl
  • 【教程】C4D文字线立体体现

    宇相
  • Andrew Ng机器学习课程笔记--week5(下)

    Neural Networks: Learning 内容较多,故分成上下两篇文章。 一、内容概要 Cost Function and Backpropagat...

    marsggbo
  • 吴恩达机器学习笔记 —— 18 大规模机器学习

    有的时候数据量会影响算法的结果,如果样本数据量很大,使用梯度下降优化参数时,一次调整参数需要计算全量的样本,非常耗时。

    用户1154259
  • QQ全城助力再获戛纳大奖,人脸识别是幕后功臣

    被誉为“广告界”奥斯卡的戛纳国际创意节,日前拉下帷幕。举办65届以来,它一直吸引着全世界最顶尖的营销、公关、设计和科技公司,以及顶级创意人。长盛不衰在于其与时俱...

    罗超频道

扫码关注云+社区

领取腾讯云代金券