首页 > 解决方案 > 当 Accuracy 已经是 1.0 时停止在 Keras 中训练

问题描述

当准确率已经达到 1.0 时,我将如何停止 Keras 训练?我尝试监控损失值,但我没有尝试在准确度已经为 1 时停止训练。

我尝试了下面的代码,但没有成功:

stopping_criterions =[
    EarlyStopping(monitor='loss', min_delta=0, patience = 1000),
    EarlyStopping(monitor='acc', base_line=1.0, patience =0)

]

model.summary()
model.compile(Adam(), loss='binary_crossentropy', metrics=['accuracy']) 
model.fit(scaled_train_samples, train_labels, batch_size=1000, epochs=1000000, callbacks=[stopping_criterions], shuffle = True, verbose=2)

更新:

训练在第一个 epoch 立即停止,即使准确度仍然不是1.0.

在此处输入图像描述

请帮忙。

标签: pythonmachine-learningkerasneural-network

解决方案


更新:在 keras 2.4.3(2020 年 12 月)中测试

我不知道为什么EarlyStopping在这种情况下不起作用。相反,我定义了一个自定义回调,当acc(或val_acc)达到指定基线时停止训练:

from keras.callbacks import Callback

class TerminateOnBaseline(Callback):
    """Callback that terminates training when either acc or val_acc reaches a specified baseline
    """
    def __init__(self, monitor='accuracy', baseline=0.9):
        super(TerminateOnBaseline, self).__init__()
        self.monitor = monitor
        self.baseline = baseline

    def on_epoch_end(self, epoch, logs=None):
        logs = logs or {}
        acc = logs.get(self.monitor)
        if acc is not None:
            if acc >= self.baseline:
                print('Epoch %d: Reached baseline, terminating training' % (epoch))
                self.model.stop_training = True

你可以像这样使用它:

callbacks = [TerminateOnBaseline(monitor='accuracy', baseline=0.8)]
callbacks = [TerminateOnBaseline(monitor='val_accuracy', baseline=0.95)]

注意:此解决方案不起作用。

如果您想在训练(或验证)准确度恰好达到 100% 时停止训练,则使用EarlyStopping回调并将baseline参数设置为 1.0 并patience设置为零:

EarlyStopping(monitor='acc', baseline=1.0, patience=0)  # use 'val_acc' instead to monitor validation accuarcy

推荐阅读