keras中的提前停止回调

Early Stop callback in keras

如何在keras中通过回调有效地停止训练模型的拟合过程?到目前为止,我已经尝试了各种方法,包括下面的方法。

class EarlyStoppingCallback(tf.keras.callbacks.Callback):
    def __init__(self, threshold):
        super(EarlyStoppingCallback, self).__init__()
        self.threshold = threshold

    def on_epoch_end(self, epoch, logs=None):
        accuracy = logs["accuracy"]
        if accuracy >= self.threshold:
            print("Stopping early!")
            self.model.stop_training = True

回调已执行,但self.model.stop_training = True似乎没有效果。打印成功,但模型继续训练。知道如何解决这个问题吗? 我的tensorflow版本是:tensorflow==1.14.0

您可能受到以下问题的影响:https://github.com/tensorflow/tensorflow/issues/37587

简而言之 - 无论何时调用 model.predictmodel.evaluatemodel.stop_training 都会重置为 False。我能够使用您的 EarlyStoppingCallback 重现此行为,然后是另一个在某些固定数据集上调用 model.predict 的回调。

解决方法是将调用 model.predictmodel.evaluate 的回调放在任何可能想要将 model.stop_training 设置为 True 的回调之前。看起来该问题已在 TF 2.2 中修复。