TensorFlow——LossNan问题

问题描述

  • 训练时梯度出现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版本导致,需要注意