首页 > 解决方案 > 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似乎没有效果。打印成功,但模型继续训练。知道如何解决这个问题吗?我的张量流版本是:张量流==1.14.0

标签: kerascallbackearly-stopping

解决方案


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

简而言之 - 每当model.predict或被model.evaluate调用时,model.stop_training都会重置为False. 我能够使用您的EarlyStoppingCallback后跟另一个调用model.predict某个固定数据集的回调来重现此行为。

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


推荐阅读