您可以根据需要创建自定义回调类。
我创建了一个应该符合您的需求的文件:
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_loss2个纪元,它将停止。
这对您有帮助吗?



