Python Keras:过度装配
我试图建立一个基于卷积的模型。我训练了两种不同的结构,如下所示。正如您可以看到的,对于单层,随着时间的推移,并没有任何明显的变化。双层Conv2D提高了列车数据集的准确性和损失,但验证特性将是一个悲剧。 根据我不能增加数据集的事实,我应该做些什么来改进验证特性? 我已经检查了正则化器L1和L2,但它们并没有影响我的模型。Python Keras:过度装配,python,tensorflow,keras,Python,Tensorflow,Keras,我试图建立一个基于卷积的模型。我训练了两种不同的结构,如下所示。正如您可以看到的,对于单层,随着时间的推移,并没有任何明显的变化。双层Conv2D提高了列车数据集的准确性和损失,但验证特性将是一个悲剧。 根据我不能增加数据集的事实,我应该做些什么来改进验证特性? 我已经检查了正则化器L1和L2,但它们并没有影响我的模型。 验证变成了一场悲剧,因为模型对训练数据的拟合过度,如果其中任何一项有效,您可以尝试 1) 批量标准化将是一个很好的选择。 2) 尝试减少批量。1)您可以使用自适应学习率(指数衰
验证变成了一场悲剧,因为模型对训练数据的拟合过度,如果其中任何一项有效,您可以尝试 1) 批量标准化将是一个很好的选择。 2) 尝试减少批量。1)您可以使用自适应学习率(指数衰减或阶跃依赖可能对您有效),此外,当您的模型进入局部最小值时,您可以尝试极高的学习率 2)如果您正在使用图像进行训练,您可以翻转、旋转或其他方式来增加数据集的大小,也许其他一些增强技术也适用于您的情况 3)尝试改变模型,如更深、更浅、更宽、更窄 4)如果您正在进行分类模型,请确保最终不会使用sigmoid作为激活函数,除非您正在进行二进制分类 5)在培训课程之前,始终检查数据集的情况
- 您的列车测试拆分可能不适合您的情况
- 您的数据中可能存在极端噪音
- 您的部分数据可能已损坏
注意:每当有新想法出现时,我都会更新它们。此外,我不想重复这些评论和其他答案,它们都为您的案例提供了有价值的信息。我尝试了各种已知的模型,这些模型在小数据集上运行良好,但正如我所怀疑的,以及我的最终结论-这是一个失败的原因 你们并没有足够的数据来训练一个好的DL模型,甚至像SVM这样的ML模型——因为有八个独立的类会使问题更加严重;您的数据集将有机会使用支持向量机进行二元分类,但对于8类数据集则没有。作为最后手段,您可以尝试XGBoost,但我不会打赌 你能做什么?获取更多数据。这是没有办法的。我没有一个确切的数字,但是对于8级分类,我想说你需要50-200倍你当前的数据才能得到合理的结果。还要注意的是,在一个更大的验证集上,您的验证性能肯定会差得多,这一数字中有说明
对于读者,OP与我分享了他的数据集;形状是:
X=(1152,1024,1),y=(1152,8)
确保如果您在Conv2D层上使用的是dropout,那么它是SpatialDropout2D
有几种技术可以处理过度拟合。正则化是第一个,如果它不影响你的结果,你要么没有正确地使用它,要么因子太小——在某一点上,你应该总能看到一些不同。辍学是另一种常见的技术,批处理规范化可能会有所帮助。如果可以的话,数据扩充也有帮助。@jdehesa我不能使用数据扩充。当然,我可以看到一些轻微的变化,但不是积极的变化。我已经尝试过批量标准化,但没有出现积极的改进@ArunJose_IntelI会很乐意你把我关于空间辍学的评论添加到你的列表中,这确实值得repeating@Andy谢谢你的回复。我想查一下辍学的学生。“我会报告的。”安迪谢谢你的回答。将两个SpatialDropout2D添加到模型的结果已添加到第一篇文章中。正如您所看到的,损耗只有一个变化(第1000个纪元中的结果与前一个模型中的结果相同,在早期纪元中没有SpatialDropout2D)。根据尝试和错误以及Physicing在文章中提到的内容,我认为这是因为我使用的数据集很小以及数据的性质。