You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keras中设置自定义误差阈值并在误差达0.02时停止训练?

解决Keras自定义误差阈值停止训练的问题

嘿,这事儿其实用Keras的EarlyStopping回调就能轻松搞定!它专门用来监控训练过程中的指标,当达到你设定的误差阈值时自动停止训练,完全贴合你的需求。

下面是修改后的完整代码,我给你加了关键的回调配置和注释,一看就懂:

from keras.models import Sequential
from keras.layers import Dense
# 导入早停回调工具
from keras.callbacks import EarlyStopping

model = Sequential()
model.add(Dense(512, activation='relu', input_shape=(dimData,)))
model.add(Dense(512, activation='relu'))
model.add(Dense(512, activation='relu'))
model.add(Dense(nClasses, activation='softmax'))

# 配置网络
model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy'])

# 定义早停规则:当误差降到0.02时停止训练
early_stop = EarlyStopping(
    monitor='val_loss',  # 监控验证集损失(想监控训练集就改成'loss')
    min_delta=0.02,      # 你设定的误差阈值,损失低于这个值就触发停止
    patience=0,          # 不需要等待额外轮次,达标立刻停
    mode='min',          # 因为损失越小越好,所以用min模式
    restore_best_weights=True  # 停止后自动恢复到损失最低的那轮权重
)

# 训练时把回调加进去
history = model.fit(
    train_data, 
    train_labels_one_hot, 
    batch_size=256, 
    epochs=20, 
    verbose=1, 
    validation_data=(test_data, test_labels_one_hot),
    callbacks=[early_stop]  # 传入早停回调
)

关键参数说明:

  • monitor='val_loss':我选了验证集损失,因为它更能反映模型的泛化能力;如果你的需求是盯着训练集误差,直接改成'loss'就行。
  • min_delta=0.02:这就是你要的误差阈值,当监控的指标降到这个值以下时,训练会立刻停止。
  • patience=0:意思是不等待,达标就停;如果怕偶然波动,你可以设成1或2,也就是连续1-2轮都低于阈值才停止。
  • restore_best_weights=True:这个很实用,能让模型最终保留的是损失最低时的权重,避免最后一轮波动带来的影响。

这样调整后,你的模型就会在误差降到0.02的时候自动停止训练啦,是不是超简单?

内容的提问来源于stack exchange,提问作者Adn Agung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:33:24