当准确率已经达到 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)
更新:
即使准确度仍然不是 1.0
,训练也会在第一个 epoch 立即停止。
请帮忙。
最佳答案
更新:在 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 和 耐心
归零:
EarlyStopping(monitor='acc', baseline=1.0, patience=0) # use 'val_acc' instead to monitor validation accuarcy
关于python - 当准确度已经是 1.0 时停止 Keras 训练,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53500047/