gpt4 book ai didi

python - Keras Callback EarlyStopping 比较训练和验证损失

转载 作者:太空狗 更新时间:2023-10-30 01:12:29 25 4
gpt4 key购买 nike

我正在 Python Keras 中拟合神经网络。

为了避免过度拟合,我想监控训练/验证损失并创建一个适当的回调,当训练损失远小于验证损失时停止计算。

一个回调的例子是:

callback = [EarlyStopping(monitor='val_loss', value=45, verbose=0, mode='auto')]

当训练损失与验证损失相比太少时,有什么方法可以停止训练吗?

提前致谢

最佳答案

您可以根据自己的目的创建自定义回调类。

我已经创建了一个应该符合您需要的:

class CustomEarlyStopping(Callback):
def __init__(self, ratio=0.0,
patience=0, verbose=0):
super(EarlyStopping, self).__init__()

self.ratio = ratio
self.patience = patience
self.verbose = verbose
self.wait = 0
self.stopped_epoch = 0
self.monitor_op = np.greater

def on_train_begin(self, logs=None):
self.wait = 0 # Allow instances to be re-used

def on_epoch_end(self, epoch, logs=None):
current_val = logs.get('val_loss')
current_train = logs.get('loss')
if current_val is None:
warnings.warn('Early stopping requires %s available!' %
(self.monitor), RuntimeWarning)

# If ratio current_loss / current_val_loss > self.ratio
if self.monitor_op(np.divide(current_train,current_val),self.ratio):
self.wait = 0
else:
if self.wait >= self.patience:
self.stopped_epoch = epoch
self.model.stop_training = True
self.wait += 1

def on_train_end(self, logs=None):
if self.stopped_epoch > 0 and self.verbose > 0:
print('Epoch %05d: early stopping' % (self.stopped_epoch))

我冒昧地解释说,如果 train_lossvalidation_loss 之间的比率低于某个ratio 阈值,你想停止.此比率参数应介于 0.01.0 之间。但是,1.0 是危险的,因为验证损失和训练损失可能在训练开始时以不稳定的方式波动很大。

您可以添加一个 patience 参数,它会等待查看突破阈值是否会持续一定数量的 epoch。

使用方法例如:

callbacks = [CustomEarlyStopping(ratio=0.5, patience=2, verbose=1), 
... Other callbacks ...]
...
model.fit(..., callbacks=callbacks)

在这种情况下,如果训练损失保持低于 0.5*val_loss 超过 2 个时期,它将停止。

这对你有帮助吗?

关于python - Keras Callback EarlyStopping 比较训练和验证损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42470604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com