当前位置: 代码迷 >> 综合 >> mxnet loss nan accuracy 0,模型提取特征输出为0
  详细解决方案

mxnet loss nan accuracy 0,模型提取特征输出为0

热度:81   发布时间:2023-12-15 16:12:12.0

我在训练孪生网络的时候遇到了这个问题


现象0:

模型finetune,一开始的时候最后分类全连接层fc7输出特征值包含inf,可以用python np.any(np.isnan(fc7)) or not np.all(np.isfinite(fc7))检测到。
可能的原因:初始化不好,你使用了不同结构的模型的权重做finetune,可以尝试:
1, 不finetune,从头训
2,finetune时不加载最后分类的全连接层权重,或者只加载部分层的权重

现象一:

模型loss稳定下降,训练集准确率特别高,loss特别低,几个epoch之后,突然出现模型输出特征值为nan,预测的人脸id为为0 (因为输出logit为0之后求argmax始终为0),loss为nan

分析:

  1. nan表示结果不是一个数。
  2. 大模型在小数据集上发生了过拟合
  3. 需要检查特征值输出,需要检查batch中输入的label和预测的label,需要检查loss公式(如果是自己构造的话)

解决:

  1. 减小模型或者增大数据集
  2. 将学习率降到很小,比如之前是0.1,现在改为0.0001,并且不再step下降
  3. 在一个训练得比较好的模型基础上finetune,学习率可能要设置小一点
  4. 样本没有做random flip

其他排查手段:

  1. 查看label是否正确,是否shuffle
  2. 如果训练loss很低,在训练集上测试模型,看是否真的都能预测正确
  3. 可视化输入样本,看是否正确

现象二:

出现inf
inf 表示结果太大,正无穷或者负无穷

可能的原因:
1,学习率太大,比如应该从0.1改为0.01或0.001。如果还不行,那应该是代码有问题
2, 你loss算的不对,导致太大
3, 你梯度算的不对,如果loss是手动构建的, 请手动推导梯度计算公式,并正确实现

  相关解决方案