七个原因导致 训练集明明很高,验证集,测试集 validation accuracy stuck 准确率 很低 损失不减小

损失函数一直在下降,为什么识别率上不去。

1.最常见的原因:过拟合
过拟合值得单独开个章节。主要包括

1.数据量小,网络复杂

2.learning rate 比较高,又没有设置任何防止过拟合的机制

解决方法主要包括

1.简化模型,利用现有深度学习手段增加数据(翻转,平移,随机裁剪,imgaug)

2.利用 dropout层

3.利用正则化

2.你犯了错误:没有把数据规格化
图片的话,img/255是肯定的

3.你犯了错误:没有在分验证集之前打乱数据
因为validation_split操作不会为你shuffle数据,所以如果你的数据前一半标签全是1 ,后一半全是0,validation=0.5。恭喜你,你压根也分不对,你的validation准确率会一直为0.因为你拿所有的正样本训练,却想判断负样本。

4.pycharm的debug模式
如果使用pycharm,调试模式,会达到损失下降,但是准确率会卡成常数。

5.你犯了错误,数据和标签没有对上
有可能再读取自定义的数据库的时候出现问题,导致数据与标注不对应。比如第一张图片用第十张的标注

6.你的训练数据太少,validation数据太多,类别也太多
比如4000张训练,1000张validation,300类,这显然就是不合理的

7.最好使用预训练的权重
大多数流行的backone比如resnet都有再imagenet数据集上与训练过,那么使用这种权重,比起随即重新训练,显然要可靠不少

 

你可能感兴趣的:(深度学习,机器学习,Ubuntu,python)