我刚开始学习机器学习和神经网络,并且一直在阅读《http://neuralnetworksanddeeplearning.com》,该书在第三章中讨论了过拟合问题。
作者在每次训练周期(epoch)后让他的示例模型在测试集上运行,这样他就可以构建图表来显示训练准确率和测试准确率(或成本的变化)。
我目前正在修改我的程序,使我的神经网络每两个训练周期后在测试集上运行,然后我将构建一个训练周期与测试准确率的图表。我猜这可能过于频繁,但我不是很确定…
作者指出,一旦测试准确率的变化停止增加,就表明发生了过拟合(或者训练集上的成本也停止增加)。所以我想我会编写代码来检测测试准确率何时达到平台期,这样我就可以自动切换训练集(要么是全新的,要么是k折交叉验证的不同变体)——但可能有更好的方法?
提前感谢您的任何建议和指导 🙂
回答:
当测试/验证损失停止改善时,这被称为提前停止(Early Stopping)。Ian Goodfellow等人在《深度学习书籍第7章》中解释了模型正则化,包括第7.8节中的提前停止。
Keras有一个回调函数来执行此检查并停止训练,恰当地命名为EarlyStopping。默认情况下,它会监控val_loss
,如果停止改善,则停止训练。