Which parameters should be used for early stopping?

我在用克拉斯为我的项目训练一个神经网络。克拉斯提供了一个早期停止的功能。我可以知道什么参数应该被观察,以避免我的神经网络过度拟合使用提前停止?

89596 次浏览

early stopping

早期停止基本上是停止训练一旦你的损失开始增加(或换句话说,验证准确性开始下降)。根据 documents,其使用方法如下;

keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')

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

  1. Monitor the validation loss (need to use cross 通过设置 monitor进行验证或至少进行训练/测试集) argument to 'val_loss'.
  2. min_delta是在某个时代是否将损失量化为 改进与否。如果损失的差异低于 min_delta,它是量化的 因为我们感兴趣,所以最好是0 当失去变得更糟的时候。
  3. patience参数表示损失开始增加(停止改善)之前停止的纪元数。 This depends on your implementation, if you use very small batches 或者一个 较高的学习率你的损失 之字形(精度会更高)所以最好设置一个 large patience argument. If you use 大批量生产 and a small 学习速度你的损失会更平滑,所以你可以使用 更小的 patience参数。无论哪种方式,我都将它保留为2,所以我会 给模特更多的机会。
  4. verbose决定打印什么,将其保留为默认值(0)。
  5. mode argument depends on what direction your monitored quantity 有(它应该是减少或增加) ,因为我们监测的损失,我们可以使用 min。但是让我们离开 Keras 帮我们处理一下,设置成 auto

所以我会使用类似这样的东西,通过绘制有和没有提前停止的误差损失来进行实验。

keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')

对于回调如何工作可能存在的模糊性,我将尝试进一步解释。一旦在模型上调用 fit(... callbacks=[es]),Kera 就会调用给定回调对象的预定函数。这些函数可以称为 on_train_beginon_train_endon_epoch_beginon_epoch_endon_batch_beginon_batch_end。在每个时代结束时调用提前停止回调,将最佳监控值与当前值进行比较,并在满足条件时停止(自观察到最佳监控值以来已经过去了多少个时代,是否超过了耐心参数,最后值之间的差异大于 min _ delta 等).

正如@BrentFaust 在评论中指出的,模型的训练将继续,直到满足提前停止条件或者满足 fit()中的 epochs参数(默认值为10)。设置提前停止回调将不会使模型训练超出其 epochs参数。因此,使用更大的 epochs值调用 fit()函数将更多地受益于提前停止回调。

下面是从另一个项目 AutoKera (https://autokeras.com/)——一个自动机器学习(AutoML)库——中提取 EarlyStops 的一个例子。该库设置两个 EarlyStop 参数: patience=10min_delta=1e-4

https://github.com/keras-team/autokeras/blob/5e233956f32fddcf7a6f72a164048767a0021b9a/autokeras/engine/tuner.py#L170

对于 Autokera 和 Keras,默认的监控数量是 val_loss:

Https://github.com/keras-team/keras/blob/cb306b4cc446675271e5b15b4a7197efd3b60c34/keras/callbacks.py#l1748 https://autokeras.com/image_classifier/