Keras回调EarlyStopping比较培训和验证损失

Keras回调EarlyStopping比较培训和验证损失,第1张

Keras回调EarlyStopping比较培训和验证损失

您可以根据需要创建自定义回调类。

我创建了一个应该符合您的需求的文件:

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_loss
validation_loss
在一定去
阈值。此比率参数应介于
0.0
和之间
1.0
。但是,这样做
1.0
很危险,因为验证损失和训练损失在训练开始时可能会以不稳定的方式波动很大。

您可以添加一个耐心参数,该参数将等待查看阈值是否在一定时期内保持不变。

使用此方法的方法例如:

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

在这种情况下,如果训练损失保持低于

0.5*val_loss
2个纪元,它将停止。

这对您有帮助吗?



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5143716.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-17
下一篇2022-11-17

发表评论

登录后才能评论

评论列表(0条)

    保存