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)
值取决于您的实现(问题,批量大小等),但通常是为了防止过度拟合我会使用;
monitor
参数设置为来监视验证丢失(需要使用交叉验证或至少训练/测试集)'val_loss'.min_delta是否在某个时代量化损失作为改进的门槛.如果损失的差异低于min_delta,则将其量化为无改善.最好将其保留为0,因为我们对损失变得更糟时感兴趣.patience参数表示一旦损失开始增加(停止改进),停止前的时期数.这取决于你的实现,如果你使用非常小的批次
或大的学习率你的损失之字形(准确性会更嘈杂)所以更好地设置一个大的patience参数.如果你使用大批量和小学习率,你的损失会更平滑,所以你可以使用较小的patience参数.无论哪种方式,我都会把它留作2,所以我会给模型更多的机会.verbose 决定要打印的内容,保留默认值(0).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_end和on_batch_begin,on_batch_end.在每个纪元结束时调用早期停止回调,将最佳监测值与当前监测值进行比较,并在条件满足时停止(自观察到最佳监测值以来已经过去多少个时期并且不仅仅是耐心论证,它们之间的区别是最后一个值大于min_delta等.).
正如@BrentFaust在评论中指出的那样,模型的训练将持续到满足早期停止条件或满足epochs参数(默认值= 10)为止fit().设置Early Stopping回调不会使模型超出其epochs参数进行训练.因此fit(),具有较大epochs值的调用函数将从Early Stopping回调中获益更多.
| 归档时间: |
|
| 查看次数: |
53183 次 |
| 最近记录: |