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.predict
或 model.evaluate
,model.stop_training
都会重置为 False
。我能够使用您的 EarlyStoppingCallback
重现此行为,然后是另一个在某些固定数据集上调用 model.predict
的回调。
解决方法是将调用 model.predict
或 model.evaluate
的回调放在任何可能想要将 model.stop_training
设置为 True
的回调之前。看起来该问题已在 TF 2.2 中修复。
如何在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.predict
或 model.evaluate
,model.stop_training
都会重置为 False
。我能够使用您的 EarlyStoppingCallback
重现此行为,然后是另一个在某些固定数据集上调用 model.predict
的回调。
解决方法是将调用 model.predict
或 model.evaluate
的回调放在任何可能想要将 model.stop_training
设置为 True
的回调之前。看起来该问题已在 TF 2.2 中修复。