损失率下降,但是准确率却提升慢或准确率结果不高

问题原因:

  1. 学习率设置太高,一个epoch直接收敛,所以损失不会下降。又没有设置防止过拟合的比如学利率一开始设置为1,因为下降太快,那么很有可能在一个epoch旧完全收敛。所以看到的validation数值并不下降,第一个epoch就已经处于谷底了。
  2. 最常见的原因:过拟合。主要包括:数据量小,网络复杂,
  3. learning rate 比较高,又没有设置任何防止过拟合的机制

解决方法:

  1. 简化模型,且进行数据增强,如:翻转,平移,随机裁剪等
  2. 利用 dropout层
  3. 利用正则化normalization
  4. 没有在分验证集之前打乱数据
  5. 数据和标签没有对上
  6. 训练数据太少,validation数据太多,类别也太多,解决方法:1.使用别的大的数据集预训练; 2.使用数据增强; 3.可以考虑迁移学习
  7. 使用预训练的权重,比较流行的backone网络,如vgg16等都有在imagenet数据集预训练的权重,使用这种权重,效果更好。
  8. 网络结构有问题。可以通过使用现在流行的网络(resnet,unet等)替入你的代码,如果结果没有问题,你的结果有问题那么肯定就是你网络结构出问题了。那么可以通过逐层注释掉排查究竟哪里出了问题。
  9. 网络最后一层没有使用正确的激活函数,比如多类别数据的应该使用softmax进行处理;
  10. relu处理后面是softmax。有一些说法是relu由于对于很大的数值直接复制,所以会对softmax产生不好的影响,从而输出不好的结果。所以可以使用tanh代替relu。
  11. batch normalization需要batch size至少16张
  12. 可能设置了一些参数是不可训练的。在训练语句之前,检查以下你的trainable参数,是否设置了一些参数是不可训练的。

猜你喜欢

转载自blog.csdn.net/weixin_41963310/article/details/112591589