经过一定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)
7条答案
按热度按时间6yoyoihd1#
您好,我们已经收到了您的问题,会安排技术人员尽快解答您的问题,请耐心等待。请您再次检查是否提供了清晰的问题描述、复现代码、环境&版本、报错信息等。同时,您也可以通过查看官网API文档、常见问题、历史Issue、AI社区来寻求解答。祝您生活愉快~
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 API,FAQ,Github Issue and AI community to get the answer.Have a nice day!
rryofs0p2#
可能是梯度太大导致权重学习到nan了,可以调小一下learning_rate或者加个gradient clip试下
sqyvllje3#
@heavengate 在optimizer里加了梯度裁剪,仍旧出现这种错误。
cngwdvgl4#
把learning rate调小一些试下
qlvxas9a5#
@heavengate 学习率调低了也没用
q7solyqu6#
@heavengate 在判断输出nan后,我打印了bn的所有参数(weight, bias, mean, variance),全部是nan, 所以输出也是nan,在bn层的前一个卷积是正常的。
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里设置