Paddle 【论文复现】经过batch normalization会输出NAN

5anewei6  于 2021-11-30  发布在  Java
关注(0)|答案(7)|浏览(1011)

经过一定epoch训练后, 输入不是NAN,但是经过BN会输出NAN, 请Maven们给个建议,怎么解决?

weight_attr = paddle.ParamAttr(regularizer=paddle.regularizer.L2Decay(0))
 bias_attr = paddle.ParamAttr(regularizer=paddle.regularizer.L2Decay(0))
 self.bn = nn.BatchNorm2D(num_features=out_channels, epsilon=1e-3, momentum=0.97, weight_attr=weight_attr, bias_attr=bias_attr, use_global_stats=False)
6yoyoihd

6yoyoihd1#

您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档常见问题历史IssueAI社区来寻求解答。祝您生活愉快~

Hi! We've received your issue and please be patient to get responded. We will arrange technicians to answer your questions as soon as possible. Please make sure that you have posted enough message to demo your request. You may also check out the APIFAQGithub Issue and AI community to get the answer.Have a nice day!

rryofs0p

rryofs0p2#

可能是梯度太大导致权重学习到nan了,可以调小一下learning_rate或者加个gradient clip试下

sqyvllje

sqyvllje3#

@heavengate 在optimizer里加了梯度裁剪,仍旧出现这种错误。

OptimizerBuilder:
  clip_grad_by_norm: 1.0
  optimizer:
    type: Momentum
    momentum: 0.9
    use_nesterov: true
  regularizer:
    factor: 0.0005
    type: L2
cngwdvgl

cngwdvgl4#

把learning rate调小一些试下

qlvxas9a

qlvxas9a5#

@heavengate 学习率调低了也没用

q7solyqu

q7solyqu6#

@heavengate 在判断输出nan后,我打印了bn的所有参数(weight, bias, mean, variance),全部是nan, 所以输出也是nan,在bn层的前一个卷积是正常的。

gstyhher

gstyhher7#

这种情况要么是学习率过大训飞了,要么是梯度过大把权重更新成nan了,可以调小学习率,配合加上grad clip试下,grad clip参考https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/ParamAttr_cn.html#paramattr
https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/ClipGradByGlobalNorm_cn.html#clipgradbyglobalnorm
这个在optimizer里设置

相关问题