交叉验证后如何训练最终的神经网络模型?

时间:2017-09-27 01:21:23

标签: python validation machine-learning neural-network conv-neural-network

这是我经常遇到的问题,但似乎没有找到答案。我有700个样本的数据集。因此,我必须使用交叉验证,而不是仅使用一个验证和一个测试集来获得错误的近似估计。

我想使用神经网络来做到这一点。但在使用神经网络进行CV并获得误差估计后,如何在整个数据集上训练NN?因为对于其他算法,如Logistic回归或SVM,不存在何时停止训练的问题。但是对于NN,你训练它直到你的验证分数下降。那么,对于最终模型,整个数据集的培训,你怎么知道何时停止?

为了说清楚,我的问题不是如何选择NN的超参数。我可以通过使用嵌套的CV来做到这一点。我的问题是如何在野外应用它之前在整个数据集上训练最终的NN(何时更具体地停止)?

1 个答案:

答案 0 :(得分:2)

重新提出问题:

“在训练神经网络时,常见的停止标准是'早期停止标准',当验证损失增加时(信号过度拟合)停止训练。对于小型数据集,训练样本很珍贵,我们宁愿使用一些其他标准并使用100%的数据来训练模型。“

我认为这通常是一个难题,所以我没有发现一个简单的答案我并不感到惊讶。我想你有几个选择:

  1. 添加正则化(例如Dropout或Batch Normalization),这有助于防止过度拟合。然后,使用训练损失作为停止标准。您可以看到这种方法如何在验证集上执行而不使用早期停止以确保模型不会过度拟合。
  2. 请确保不要过度配置模型。较小的模型将难以适应过度拟合。
  3. 查看本文中描述的停止标准,该标准不依赖于验证集:https://arxiv.org/pdf/1703.09580.pdf
  4. 最后,您可能不会在此处使用神经网络。通常,这些模型在大量训练数据时效果最佳。在700个样本的情况下,使用另一种算法可以获得更好的性能。