Keras提前停止
conv-neural-network
deep-learning
keras
python
5
0

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

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

提前停止

一旦您的损失开始增加(或换句话说,验证准确性开始降低),早期停止基本上就是停止训练。根据文件,其用法如下:

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

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

  1. 通过将monitor参数设置为'val_loss'monitor验证损失(需要使用交叉验证或至少训练/测试集)。
  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')

为了避免对回调的工作方式产生歧义,我将尝试解释更多信息。一旦在模型上调用fit(... callbacks=[es]) ,Keras就会调用给定的回调对象预定的函数。这些函数可以称为on_train_beginon_train_endon_epoch_beginon_epoch_endon_batch_beginon_batch_end 。在每个时期结束时调用提前停止回调,将最佳监视值与当前监视值进行比较,并在条件满足时停止(观察最佳监视值以来已经过去了多少个时期,这不仅仅是耐心参数,两者之间的差最后一个值大于min_delta等。)。

正如评论由@BrentFaust尖,模型的训练将一直持续,直到提前终止条件满足或epochs参数(默认为10), fit()满足。设置“提早停止”回调不会使模型超出其epochs参数进行训练。因此,使用较大的epochs值调用fit()函数将从Early Stopping回调中受益更多。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号