【问题标题】:Why does gradient check in batch normalization is not working?为什么批量标准化中的梯度检查不起作用?
【发布时间】:2018-10-09 08:18:11
【问题描述】:

我有一个神经网络的自我实现,具有学习率、动量、L1/L2 正则化和批量标准化。当我执行梯度检查时,所有梯度都是正确的,除非我使用批量归一化

我编写了一个 python 代码来测试仅对批量标准化的梯度检查: https://gist.github.com/arnaldog12/9ba321cfdb18b6955a83403df1a7f514

对于上面的代码,我尝试删除所有不必要的代码,如动力、辍学和 L1/L2 正则化。如果你只是将上面的代码复制并粘贴到一些带有numpy的python环境中,它就可以工作。

我相信错误在于我传递给 batchnorm_backward 函数的梯度和我稍后计算的梯度。目前,我一直在调试代码,但一直没能找到问题所在。

有人已经对批量归一化进行了梯度检查吗? 如果是这样,我做错了什么?

【问题讨论】:

    标签: python neural-network gradient-descent batch-normalization


    【解决方案1】:

    一段时间后,我意识到,为了检查批范数的梯度,您必须像模型处于训练模式一样计算成本。如果您在模型处于测试模式时检查梯度,则批范数将使用运行均值和方差而不是批均值和批方差,并且梯度检查将失败。

    【讨论】:

      猜你喜欢
      • 2019-08-21
      • 2018-01-15
      • 1970-01-01
      • 2022-12-12
      • 2021-06-12
      • 1970-01-01
      • 1970-01-01
      • 2019-09-06
      • 1970-01-01
      相关资源
      最近更新 更多