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
相关产品推荐
相关产品推荐

