造成深度学习模型训练准确率(高)与验证准确率(低)相差较大的可能原因

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/u013249853/article/details/89393982

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

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.你犯了错误,数据和标签没有对上

有可能再读取自定义的数据库的时候出现问题,导致数据与标注不对应。比如第一张图片用第十张的标注

5.你的训练数据太少,validation数据太多,类别也太多

比如4000张训练,1000张validation,300类,这显然就是不合理的

6.最好使用预训练的权重

大多数流行的backone比如resnet都有再imagenet数据集上与训练过,那么使用这种权重,比起随即重新训练,显然要可靠不少注意调整学习率。

7.网络结构有问题

可以通过使用现在流行的网络(resnet,unet等)替入你的代码,如果结果没有问题,你的结果有问题那么肯定就是你网络结构出问题了。那么可以通过逐层注释掉排查究竟哪里出了问题

7.1 网络最后一层没有使用正确的激活函数

比如多类的应该使用softmax

8.relu后面是softmax

有一些说法是relu由于对于很大的数值直接复制,所以会对softmax产生不好的影响,从而输出不好的结果。所以可以使用tanh代替relu。

9.batch normalization

https://mp.csdn.net/postedit/89456400

由于做dense prediction图片通常比较大。所以一个batch一般都只有1-2张图片,不建议使用 BN。

另外keras TF1.x可能会出问题,https://github.com/keras-team/keras/pull/9965

10.你犯了错误,你可能设置了一些参数是不可训练的

在训练语句之前,检查以下你的trainable参数,是否设置了一些参数是不可训练的。这还可能导致你的输出只能是一个值,比如永远预测为标注0,因为你只有一点点的参数,而这并不是一个模型(比如只有100个参数是可以训练的,太简单了,无法模拟)。

11.附送一个调参论文

Bag of Tricks for Image Classification with Convolutional Neural Networks

https://arxiv.org/abs/1812.01187

 

  • 25
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
深度学习模型验证集上表现良好但在测试集上表现不佳可能有几个原因。首先,过拟合是常见的原因之一。过拟合表示模型训练集上过度适应了数据的细节和噪声,导致在未见过的数据上表现不佳。为了解决过拟合问题,可以采取一些方法,如增加训练数据、使用正则化技术(如L1或L2正则化)或者使用dropout等。 另一个可能原因验证集和测试集之间的分布差异。验证集通常用于调整模型超参数和选择最佳模型,而测试集用于最终评估模型的性能。如果验证集和测试集之间存在显著的分布差异,模型验证集上的准确率可能无法在测试集上得到保证。这可能是由于数据采样方式、数据预处理或数据收集过程中的偏差等原因造成的。 此外,测试集的规模可能较小,导致测试结果具有较大的随机性。对于小规模的测试集,即使模型验证集上具有较准确率,也很难保证在测试集上表现一致。 最后,深度学习模型本身的结构和参数选择也可能导致在测试集上的性能下降。模型的复杂度、层数、激活函数的选择等因素都可能对测试集的准确率产生影响。调整这些因素可能需要进行更多的实验和优化。 总之,深度学习模型验证集上准确率但在测试集上准确率原因可能包括过拟合、验证集和测试集之间的分布差异、测试集规模较小以及模型本身的结构和参数选择等因素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值