我正在使用 Keras 为我的项目训练神经网络。 Keras 提供了提前停止的功能。我可以知道应该观察哪些参数来避免我的神经网络通过使用提前停止来过度拟合吗?
最佳答案
早期停止基本上是在您的损失开始增加(或者换句话说,验证准确度开始下降)时停止训练。根据documents用法如下;
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=0,
verbose=0, mode='auto')
值取决于您的实现(问题、批量大小等),但通常是为了防止我会使用过拟合;
- 监控validation loss(需要使用cross
验证或至少训练/测试集)通过设置
monitor
'val_loss'
的参数。 min_delta
是一个阈值,用于将某个时期的损失量化为 改善与否。如果loss的差值低于min_delta
,则量化 因为没有改善。最好将其保留为 0,因为我们感兴趣 当损失变得更糟时。patience
参数表示一旦你的损失开始增加(停止改进)之前停止的时期数。 这取决于您的实现,如果您使用非常小的批处理 或大学习率你的损失zig-zag(准确度会更嘈杂)所以最好设置一个 大的patience
参数。如果您使用大批量和小批量 学习率你的损失会更平滑,所以你可以使用 较小的patience
参数。无论哪种方式,我都会将其保留为 2 所以我会 给模型更多机会。verbose
决定要打印的内容,将其保留为默认值 (0)。mode
参数取决于你监控数量的方向 有(它应该是减少还是增加),因为我们监控损失,我们可以使用min
。但是让我们离开 keras 为我们处理并将其设置为auto
所以我会使用类似的东西并通过绘制有和没有提前停止的错误损失来进行实验。
keras.callbacks.EarlyStopping(monitor='val_loss',
min_delta=0,
patience=2,
verbose=0, mode='auto')
对于回调的工作方式可能存在歧义,我将尝试解释更多。在模型上调用 fit(... callbacks=[es])
后,Keras 会调用给定的回调对象预定函数。这些函数可以称为on_train_begin
、on_train_end
、on_epoch_begin
、on_epoch_end
和on_batch_begin
, on_batch_end
。在每个时期结束时调用提前停止回调,将最佳监测值与当前值进行比较,如果满足条件则停止(自观察到最佳监测值以来已经过去了多少时期,是否超过耐心参数,两者之间的差异最后一个值大于 min_delta 等..)。
正如@BrentFaust 在评论中指出的那样,模型的训练将继续进行,直到满足 Early Stopping 条件或满足 fit()
中的 epochs
参数(默认 = 10) .设置 Early Stopping 回调不会使模型训练超出其 epochs
参数。因此,使用较大的 epochs
值调用 fit()
函数将从 Early Stopping 回调中受益更多。
关于python - 哪些参数应该用于提前停止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43906048/