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

Keras早停机制保存错误轮次问题求助

Keras早停机制restore_best_weights异常问题

近期是否有其他用户遇到Keras的这类问题?

问题现象

  • 早停触发时,实际保存的是最佳轮次的后一轮模型:将patience设为2验证,早停机制触发,最佳轮次为第4轮(损失值0.0898),但运行model.evaluate后发现实际保存的是第5轮的模型,多次测试结果一致。
  • 早停未触发时,存在一个额外的“幽灵轮次”:该轮次既不会打印,也不会出现在训练历史记录中,但模型会存储该轮次的权重。

复现代码

import keras
from keras import backend as K

# 初始化与模型构建
initializer = keras.initializers.RandomUniform(minval= -0.2, maxval=0.5)
model = keras.Sequential([
    keras.layers.Dense(2, activation=K.elu, input_shape=[3],  kernel_initializer=initializer),
    keras.layers.Dense(2, activation=K.elu,  kernel_initializer=initializer),
    keras.layers.Dense(2,  kernel_initializer=initializer)
])

# 模型编译
rms = keras.optimizers.RMSprop(0.01)
model.compile(loss='mean_absolute_error', optimizer=rms)

# 早停回调设置与训练
es = keras.callbacks.EarlyStopping(
    monitor='loss', 
    mode='min', 
    patience = 10, 
    restore_best_weights = True, 
    verbose=0)

historyData = model.fit(xarray_norm, yarray_norm, epochs=5, callbacks=[es])

# 模型评估与历史输出
training_eval = model.evaluate(xarray_norm, yarray_norm, verbose=1)
print()
print('training loss = ', training_eval)
print()
print('History of Loss:')
print(historyData.history)

补充验证

已确认并非fit输出受批次平均值影响,多次验证显示restore_best_weights始终选择最佳轮次的后一轮——model.evaluate与model.fit的损失输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 11:35:28