Keras中Early Stopping仅训练1个epoch的问题排查与解决
问题诊断与快速修复
哈哈,这个问题其实很容易忽略——你在启用早停的那行model.fit()代码里,漏掉了epochs=200这个参数!
Keras的fit()函数默认只跑1个epoch,哪怕你设置了patience=5,模型也没机会跑到能触发早停的轮次,直接就结束了。这就是为什么一启用早停就只训练1轮的核心原因。
修正后的完整代码
把epochs=200加回去,和你无早停时的调用保持一致:
# 先初始化早停回调(建议显式指定monitor,逻辑更清晰) early_stopping = EarlyStopping(monitor='val_loss', patience=5) # 训练时补上epochs参数 hist = model.fit(X, y, validation_split=0.2, callbacks=[early_stopping], batch_size=16, epochs=200)
额外优化建议
为了让早停功能更实用,我还建议加上restore_best_weights=True参数——这样模型停止训练时,会自动恢复到验证集损失最低的那个epoch的权重,而不是停在最后一个可能已经过拟合的epoch:
early_stopping = EarlyStopping(monitor='val_loss', patience=5, restore_best_weights=True)
另外可以确认一下:你的验证集划分validation_split=0.2是合理的,损失函数用的mean_absolute_percentage_error和监控的val_loss对应正确,这些都没问题。
这样修改后,模型就会按照预期最多跑200个epoch,只有当验证集损失连续5个epoch没下降时才会提前停止。
内容的提问来源于stack exchange,提问作者user8270077
相关产品推荐
相关产品推荐

