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

如何基于验证集继续训练Keras模型以优化测试集性能?

Keras模型利用验证集提升测试性能的正确做法

首先明确:不要只在验证集上单独训练,正确的操作是用「训练集+验证集」的完整数据来训练(或继续训练),这样才能真正提升模型在测试集上的泛化性能。

为什么不能只训验证集?

  • 仅用model.fit(val_ds)训练的话,模型会快速过拟合这个小数据集——它会彻底忘掉之前在训练集上学到的通用特征,只记住验证集的样本细节,面对测试集的陌生数据时性能会暴跌,完全达不到你想要的效果。

正确操作方案

方案1:基于已训模型继续微调(推荐)

如果你不想从头训练,想保留之前训练得到的有效权重,可以把训练集和验证集合并后,用低学习率继续训练:

# 合并训练集与验证集
full_ds = train_ds.concatenate(val_ds)
# 继续训练,initial_epoch是之前已经训练的轮数,学习率调低避免破坏已有特征
model.fit(
    full_ds,
    epochs=model.epochs + 5,  # 在原有轮数基础上加几轮微调
    initial_epoch=model.epochs,
    learning_rate=1e-5  # 建议用比之前小10-100倍的学习率
)

低学习率是关键:模型已经有不错的基础,小步微调能融合验证集的信息,同时不丢失之前的泛化能力。

方案2:用完整数据集从头训练

如果你想彻底重新训练,直接用合并后的数据集从头开始即可,注意根据之前的训练情况调整训练轮数,避免过拟合:

full_ds = train_ds.concatenate(val_ds)
model.fit(full_ds, epochs=20)  # 轮数参考之前训练时的最优轮数调整

重要提醒

  • 无论哪种方式,绝对不能将测试集加入训练或验证流程,测试集只能用来做最终的性能评估,一旦触碰测试集,你的性能结果就失去了参考价值。
  • 如果你之前是用model.fit的validation_split参数自动划分验证集,那直接去掉这个参数,用全量数据训练即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:05:34