如何通过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中修复。