Python 训练损失减少,而开发损失增加

Python 训练损失减少,而开发损失增加,python,tensorflow,machine-learning,neural-network,deep-learning,Python,Tensorflow,Machine Learning,Neural Network,Deep Learning,我在单层CNN二元分类模型中观察到以下模式: 训练损失随着步数的增加而减少,而开发损失则随着步数的增加而增加 训练精度随着步数的增加而增加,而开发精度则随着步数的增加而降低 根据过去的SO问题和文献回顾,这些模式似乎表明过度拟合(该模型在训练中表现良好,但无法推广到新的示例) 下面的图表说明了培训步骤数量的损失和准确性 在这两方面 橙色行表示开发集性能的摘要 蓝色行表示训练集性能的摘要 损失: 准确度: 我考虑过的传统疗法,以及我对它们的观察: 添加L2正则化:我尝试了许多L2正则化系

我在单层CNN二元分类模型中观察到以下模式:

  • 训练损失随着步数的增加而减少,而开发损失则随着步数的增加而增加
  • 训练精度随着步数的增加而增加,而开发精度则随着步数的增加而降低
  • 根据过去的SO问题和文献回顾,这些模式似乎表明过度拟合(该模型在训练中表现良好,但无法推广到新的示例)

    下面的图表说明了培训步骤数量的损失和准确性

    在这两方面

    • 橙色行表示开发集性能的摘要
    • 蓝色行表示训练集性能的摘要
    损失:

    准确度:

    我考虑过的传统疗法,以及我对它们的观察:

    • 添加L2正则化:我尝试了许多L2正则化系数——从0.0到4.5;所有这些测试在第5000步的损失和准确性方面都会产生类似的模式
    • 交叉验证:似乎网上对交叉验证的作用普遍误解。正如答案所述,交叉验证用于模型检查,而不是模型构建。事实上,交叉验证将是检查模型是否具有良好的通用性的一种方法。事实上,我展示的图是4倍交叉验证的一倍。如果我在所有褶皱中观察到类似的损失/准确性模式,交叉验证除了确认模型不能很好地概括外,还能提供什么其他见解
    • 提前停止:这似乎是最直观的,但损失图似乎表明,只有在观察到偏差集损失后,损失才会趋于稳定;那么,提前停车的起点似乎并不容易确定
    • 数据:我可用的标记数据数量有限,因此目前无法进行更多数据的培训
    尽管如此,我要问的是:

  • 如果损失和准确度中观察到的模式确实表明过度拟合,是否有其他方法可以抵消我没有考虑过的过度拟合
  • 如果这些模式不表示过度拟合,那么它们还意味着什么

  • 谢谢——如果您有任何见解,我们将不胜感激。

    我认为您的思路完全正确。看起来像是经典的过度合身

    一个选择是,如果你还没有辍学,就增加辍学。它属于正则化的范畴,但现在比L1和L2正则化更常用

    改变模型架构可以得到更好的结果,但很难说具体什么是最好的。它可以通过更多的层和可能的一些池层使其更深入。它可能仍然会过度拟合,但在此之前,您可能会在开发集上获得更高的精度

    获取更多数据可能是你能做的最好的事情之一。如果无法获得更多数据,可以尝试增加数据。您还可以尝试清理数据以删除噪波,这有助于防止模型拟合到噪波

    您可能最终想要尝试设置超参数优化搜索。然而,这可能需要一段时间来训练神经网络。确保在超级参数调整之前删除测试集