EarlyStopping 基于损失

数据挖掘 深度学习 美国有线电视新闻网 早停
2022-02-21 07:10:11

在训练我的 CNN 模型时,基于权重的随机初始化,我得到了预测结果。换句话说,使用相同的训练和测试数据,每次运行代码时我都会得到不同的结果。在跟踪损失时,我可以知道结果是否可以接受。基于此,我想知道是否有一种方法可以停止训练,如果损失以高于所需值的值开始,以便重新运行它。min_deltaEarlyStopping处理这种情况。

提前致谢

1个回答

您可以使用自定义 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])

查看链接的文章以获取更多详细信息:

https://towardsdatascience.com/neural-network-with-tensorflow-how-to-stop-training-using-callback-5c8d575c18a9