我想在我的模型达到某个阈值后停止训练。我已经为Tensorflow编写了一个回调类。我正在训练MNIST数据集,用于分类手写数字和识别。但不知为何,训练并没有停止。我找不到原因。以下是我的代码。
import tensorflow as tf
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if(logs.get('accuracy')>0.99):
print("\nReached 99% accuracy so cancelling training!")
self.model.stop_training = True
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0
callbacks = myCallback()
model = tf.keras.models.Sequential([
tf.keras.layers.Flatten(input_shape=(28, 28)),
tf.keras.layers.Dense(512, activation=tf.nn.relu),
tf.keras.layers.Dense(10, activation=tf.nn.softmax)])
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
model.fit(x_train, y_train, epochs=10, callbacks=[callbacks])
回答:
尝试这个
class StopOnPoint(tf.keras.callbacks.Callback):
def __init__(self, point):
super(StopOnPoint, self).__init__()
self.point = point
def on_epoch_end(self, epoch, logs=None):
accuracy = logs["accuracy"]
if accuracy >= self.point:
self.model.stop_training = True
callbacks = [StopOnPoint(0.98)] # <- set optimal point