问题描述
- 训练时梯度出现nan或-nan
- 问题详细描述:在训练时,出现异常:NanLossDuringTrainingError: NaN loss during training.
问题分析
- 进一步分析,batch_size=1且worker=1时,发现首先是线上梯度出现nan或-nan,然后下一轮跌待中所有数据都是nan,进一步导致loss为nan
- 在问题确认过程中,需要一步步排除:
- 排除分母除0的情况,可以简单的用
tf.div_no_nan
代替\
- 排除log参数为负数或0的情况
- 排除抽取batch中选择符合条件的行后出现行数为[]的情况,使用
tf.shape(x)[0]
是否为0来判断是否为空 - 重点:排除整数除法等导致的值为0的情况,这种情况比较隐晦,难以感知
- 有时候会是TensorFlow版本导致,需要注意
- 排除分母除0的情况,可以简单的用