过拟合 准确率大幅下降_避免过拟合的early-stopping-在keras中该如何设置参数?

#科技新星创作营# #机器学习# #深度学习# #神经网络#

背景

我正在使用Keras为我的项目训练一个神经网络。keras提供了early-stopping的功能。那我应该设置哪些参数来实现early-stopping避免神经网络过度拟合呢?

3a55117780f32524b29b6967ee7ce3ee.png

函数介绍

early-stopping一般是在损失开始增加时(或者换句话说,验证集上的准确性开始下降)停止训练的。

根据官方文档,keras的相关函数如下所示:

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

一般情况下,为了防止过拟合,我们可以如下使用:

  • 通过将monitor参数设置为"val_loss"来监控模型在验证集上的损失值(需要使用交叉验证或至少要有train/test集合划分)。
  • min_delta是衡量在epoch过程中计算的损失是否作为模型改善的一个阈值。如果损失的变化小于min_delta,则视作对网络改善没有帮助。最好将它置为为0,因为我们对损失变得糟糕时感兴趣。
  • patience参数表示一旦损失开始增加(停止改善),在停止之前的epoch数。这取决于网络的实现,如果你使用非常小的batch_size或较大的学习率,你的损失便会是锯齿状(准确率将会有更多噪声),此时最好设置一个大的patience。如果你使用大批量和小学习率,你的损失将更平稳,因此你可以使用一个较小的patience。不管怎样,我一般都将其保留为2,这样我就可以给模型更多的试验机会。
  • verbose决定打印什么,保留默认值(0)。
  • mode参数取决于监视数量的方向(应该是减少还是增加),因为我们监视损失,所以可以使用min。但是一般都是让keras为我们自动处理,将其设置为auto即可。

所以我会用这样的方法,通过绘制错误损失图来进行实验,包括提前停止和不提前停止。

所以,一般我会使用下面的参数:

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

在keras中回调函数可以在on_train_begin, on_train_end, on_epoch_begin, on_epoch_end,on_batch_begin, on_batch_end等环节进行调用,而early stopping的回调一般是在每个epoch结束的时候调用的,将最佳监视值与当前值进行比较,并在满足条件时停止(自观察到最佳监视值以来已过去了多少个epoch,是否超过了耐心参数,最后一个值之间的差异是否大于最小增量等)。

模型的训练将持续到满足early stopping条件或满足fit函数定义中的epochs参数(默认值为10)为止。设置early stopping回调不会使模型的训练超出其epochs参数。因此,使用更大的epochs值调用fit函数将从early stopping回调中获益更多。

102e0659b99d96d26ab1fb5c1e8e44bf.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值