python - 当 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
.
请帮忙。
解决方案
更新:在 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
推荐阅读
- sql - 订单管理 SQL 模式
- python - ImportError: DLL load failed: 找不到指定的模块?
- arrays - ruby 子数组添加了哪些内存要求?
- powershell - 如何为 Microsoft 365/AzureAD/Exchange Online 自动化的 powershell 脚本进行身份验证?
- google-compute-engine - 实例组:资源“us-instance-group-1”超过限制“QUOTA_FOR_INSTANCES”。限制:8.0
- javascript - 会话存储值未显示在第二页中
- c# - 过滤除一个以外的所有控制器的 .net 核心
- python - 排序函数
- python - Pandas 使用字典追加行以某种方式为某些新字典项添加列
- c++ - vscode c++调试器包含路径配置