在训练我的 CNN 模型时,基于权重的随机初始化,我得到了预测结果。换句话说,使用相同的训练和测试数据,每次运行代码时我都会得到不同的结果。在跟踪损失时,我可以知道结果是否可以接受。基于此,我想知道是否有一种方法可以停止训练,如果损失以高于所需值的值开始,以便重新运行它。的min_delta不EarlyStopping处理这种情况。
提前致谢
在训练我的 CNN 模型时,基于权重的随机初始化,我得到了预测结果。换句话说,使用相同的训练和测试数据,每次运行代码时我都会得到不同的结果。在跟踪损失时,我可以知道结果是否可以接受。基于此,我想知道是否有一种方法可以停止训练,如果损失以高于所需值的值开始,以便重新运行它。的min_delta不EarlyStopping处理这种情况。
提前致谢
您可以使用自定义 on_epoch_end 方法扩展回调的基本 Keras 实现,该方法将您感兴趣的指标与提前停止的阈值进行比较。
从链接的文章中,他们提供了一个带有自定义回调类的代码示例+在以下期间调用该类model.fit:
import tensorflow as tf
# Implement callback function to stop training
# when accuracy reaches ACCURACY_THRESHOLD
ACCURACY_THRESHOLD = 0.95
class myCallback(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs={}):
if(logs.get('acc') > ACCURACY_THRESHOLD):
print("\nReached %2.2f%% accuracy, so stopping training!!" %(ACCURACY_THRESHOLD*100))
self.model.stop_training = True
# Instantiate a callback object
callbacks = myCallback()
# Load fashion mninst dataset
mnist = tf.keras.datasets.fashion_mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()
# Scale data
x_train, x_test = x_train / 255.0, x_test / 255.0
# Build a conv dnn model
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=20, callbacks=[callbacks])
查看链接的文章以获取更多详细信息: