Keras提前停止

Aiz*_*man 78 python deep-learning conv-neural-network keras

我正在使用Keras为我的项目训练神经网络.Keras提供了早期停止的功能.我是否应该知道应该观察哪些参数以避免我的神经网络过度拟合使用早期停止?

umu*_*tto 124

提早停止

一旦您的损失开始增加(或者换句话说,验证准确性开始下降),提前停止基本上会停止训练.根据文件,它使用如下;

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=0,
                              verbose=0, mode='auto')
Run Code Online (Sandbox Code Playgroud)

值取决于您的实现(问题,批量大小等),但通常是为了防止过度拟合我会使用;

  1. 通过将monitor 参数设置为来监视验证丢失(需要使用交叉验证或至少训练/测试集)'val_loss'.
  2. min_delta是否在某个时代量化损失作为改进的门槛.如果损失的差异低于min_delta,则将其量化为无改善.最好将其保留为0,因为我们对损失变得更糟时感兴趣.
  3. patience参数表示一旦损失开始增加(停止改进),停止前的时期数.这取决于你的实现,如果你使用非常小的批次大的学习率你的损失之字形(准确性会更嘈杂)所以更好地设置一个大的patience参数.如果你使用大批量小学习率,你的损失会更平滑,所以你可以使用较小的patience参数.无论哪种方式,我都会把它留作2,所以我会给模型更多的机会.
  4. verbose 决定要打印的内容,保留默认值(0).
  5. mode参数取决于您监控数量的方向(它应该是减少还是增加),因为我们监控损失,我们可以使用min.但是让我们让keras为我们处理这个并将其设置为auto

所以我会使用这样的东西并通过绘制错误丢失进行实验,无论是否提前停止.

keras.callbacks.EarlyStopping(monitor='val_loss',
                              min_delta=0,
                              patience=2,
                              verbose=0, mode='auto')
Run Code Online (Sandbox Code Playgroud)

对于回调如何工作的可能模糊性,我将尝试解释更多.一旦你打电话fit(... callbacks=[es])给你的模型,Keras会给回调对象调用预定的功能.这些功能可以称为on_train_begin,on_train_end,on_epoch_begin,on_epoch_endon_batch_begin,on_batch_end.在每个纪元结束时调用早期停止回调,将最佳监测值与当前监测值进行比较,并在条件满足时停止(自观察到最佳监测值以来已经过去多少个时期并且不仅仅是耐心论证,它们之间的区别是最后一个值大于min_delta等.).

正如@BrentFaust在评论中指出的那样,模型的训练将持续到满足早期停止条件或满足epochs参数(默认值= 10)为止fit().设置Early Stopping回调不会使模型超出其epochs参数进行训练.因此fit(),具有较大epochs值的调用函数将从Early Stopping回调中获益更多.

  • @AizuddinAzman关闭,`min_delta`是一个阈值,是否将监测值的变化量化为一种改进.所以,是的,如果我们给`monitor ='val_loss',那么它将指的是当前验证损失与先前验证损失之间的差异.实际上,如果你给'min_delta = 0.1`,小于0.1的验证损失(当前 - 前一个)的减少将无法量化,因此会停止训练(如果你有'耐心= 0`). (2认同)
  • 请注意,`callbacks = [EarlyStopping(patience = 2)]`没有效果,除非给出了`model.fit(...,epochs = max_epochs)`的纪元. (2认同)
  • @AdmiralWen因为我写了答案,所以代码有所改变.如果您使用的是最新版本的Keras,则可以使用[`restore_best_weights`](https://github.com/keras-team/keras/blob/master/keras/callbacks.py#L480&L483)参数(不是(文档),在训练后加载具有最佳权重的模型.但是,为了您的目的,我将使用``ModelCheckpoint`](https://keras.io/callbacks/#modelcheckpoint)回调和`save_best_only`参数.您可以查看文档,它可以直接使用,但您需要在培训后手动加载最佳重量. (2认同)