趋近智
fit() 方法当你训练一个神经网络时,最终目标不仅仅是在训练过的数据上达到高准确率。模型真正的检验是它的泛化能力,即它在新数据、未见过的数据上的表现如何。阻碍泛化的两个常见问题是欠拟合和过拟合。在这两者之间找到适当的平衡对于构建有效的深度学习模型非常重要。
想象一下,你正在尝试用曲线拟合一组数据点。
欠拟合模型通常在训练数据和验证(或测试)数据上表现不佳。这表明模型的能力不足(例如,层或神经元数量不足,或训练的周期数过少),无法学习数据中有意义的关系。
欠拟合的迹象包括:
从视觉上看,训练和验证损失曲线可能都保持在高位并且在训练周期内几乎没有改善。
过拟合发生于当模型对训练数据学习得过于好,包括数据的噪声和随机波动。虽然它可能在训练集上取得极佳表现,但在未见过的数据上性能会显著下降。当模型相对于训练数据的量和质量而言变得过于复杂时,就会出现这种情况。
过拟合的迹象包括:
让我们来直观地看一下这些现象通常如何在训练周期中训练和验证损失曲线上呈现:
比较训练损失(蓝线)和验证损失(橙线)随周期数的变化。欠拟合表现为两者损失都高。过拟合表现为训练损失下降而验证损失开始上升。良好拟合表现为两者都收敛到低值。
欠拟合和过拟合与机器学习中的偏差和方差直接相关:
理想情况下,我们追求低偏差和低方差的模型。然而,两者之间常有权衡:降低偏差(使模型更复杂)可能会增加方差,而降低方差(使模型更简单或增加约束)可能会增加偏差。深度学习模型因其高能力,如果管理不当,特别容易出现高方差(过拟合)。
在Keras训练期间监测过拟合和欠拟合最直接的方式是使用验证数据集。当你调用 model.fit() 方法时,你可以使用 validation_data 或 validation_split 参数提供验证数据。Keras将在每个周期结束时,在这个验证集上评估损失和任何指定的指标。
# 假设模型已编译,并且你拥有训练/验证数据
# history = model.fit(x_train, y_train,
# epochs=50,
# batch_size=128,
# validation_data=(x_val, y_val)) # 重要步骤!
# 训练后,history.history 包含损失和指标
# train_loss = history.history['loss']
# val_loss = history.history['val_loss']
# train_acc = history.history['accuracy']
# val_acc = history.history['val_accuracy']
# 绘制这些值随周期数变化的图表以进行诊断
绘制这些 history 指标,就像上面的图表所示,提供重要的诊断工具,用于理解你的模型表现如何。识别这些图表中欠拟合和过拟合的规律是深度学习开发中一项重要技能。
理解这些内容是第一步。本章后续小节将介绍具体的技术,例如正则化、数据增强和回调,这些技术专门用于对抗过拟合并帮助你实现更好的模型泛化。
这部分内容有帮助吗?
model.fit method, Keras Team, 2023 - Keras官方文档,详细介绍了fit方法,包括validation_data等参数及其在训练期间监测模型性能的用法。© 2026 ApX Machine Learning用心打造