趋近智
一旦您启动训练过程,通常是通过调用Keras中的fit函数或在PyTorch中管理训练循环来完成,框架便会根据训练数据开始迭代调整模型权重。然而,训练神经网络并非一项可以简单启动后就放任不管的任务。密切关注训练的进展情况非常必要,以便了解模型是否正在有效学习、学习速度是否过慢,或者是否过度学习了训练数据,从而牺牲了对新数据的泛化能力(过拟合)。
监控训练可提供对学习动态的重要观察。通过随着时间(通常是跨训练周期)追踪重要指标,您可以诊断问题,就何时停止训练做出明智决定,并收集改进模型或训练设置的线索。您将监控的两种主要指标是损失和性能指标。
损失函数量化了模型预测值与训练期间实际目标值之间的差距。损失越低,通常表示模型在正在评估的数据上表现越好。监控两种类型的损失是标准做法:
尽管损失指导着优化过程,但它可能并非总是最直观的性能衡量标准。例如,知道交叉熵损失是0.1并不能立即告诉您有多少分类是正确的。因此,我们还会追踪与任务相关的性能指标。
大多数机器学习框架在您配置或编译模型时,可以轻松指定除损失函数外还需要追踪哪些指标。
在训练期间,Keras等框架或PyTorch Lightning等库通常会在每个训练周期结束时打印损失和指标值。您可能会看到如下输出:
Epoch 1/20
1500/1500 [==============================] - 5s 3ms/step - loss: 0.4521 - accuracy: 0.8534 - val_loss: 0.2105 - val_accuracy: 0.9312
Epoch 2/20
1500/1500 [==============================] - 4s 3ms/step - loss: 0.1855 - accuracy: 0.9432 - val_loss: 0.1520 - val_accuracy: 0.9558
...
Epoch 20/20
1500/1500 [==============================] - 4s 3ms/step - loss: 0.0412 - accuracy: 0.9870 - val_loss: 0.0950 - val_accuracy: 0.9715
此输出显示了训练周期数、周期内进度、耗时、训练损失、训练准确率、验证损失和验证准确率。
此外,训练函数通常会返回一个history对象(名称可能因框架而异)。此对象存储了每个训练周期记录的损失和指标值,让您能够在过程完成后分析和可视化训练趋势。
# 使用Keras history对象的示例
# history = model.fit(train_data, train_labels, epochs=20, validation_data=(val_data, val_labels))
# 访问记录的数据
# training_loss = history.history['loss']
# validation_loss = history.history['val_loss']
# training_accuracy = history.history['accuracy']
# validation_accuracy = history.history['val_accuracy']
# 之后您可以使用Matplotlib或Plotly等库来绘制这些值
将训练损失/指标和验证损失/指标随训练周期绘制成图,是理解训练动态最有效的方法。以下是一些常见模式:
理想情况下,训练损失和验证损失都稳定下降并趋于收敛,而训练指标和验证指标则增加并趋于收敛。这表明模型学习良好并能有效泛化。
训练损失和验证损失一同下降并趋于平稳。
训练准确率和验证准确率一同上升并趋于平稳。
一种常见问题,模型过度具体地学习训练数据,包括其噪声和特殊性。这导致模型在新的、未见数据上表现不佳。过拟合通常在以下情况被识别:
训练损失持续下降,而验证损失开始增加,表明出现过拟合。
这发生在模型过于简单而无法捕捉数据中隐藏模式,或者训练周期不足时。迹象包括:
训练损失和验证损失都在高值处趋于平稳,表明模型无法充分学习数据模式。
在独立于训练集和最终测试集的验证集上监控性能非常必要。验证集提供了模型在训练期间泛化情况的无偏估计。它有助于早期检测过拟合,并为何时停止训练(一种称为“早期停止”的技术,稍后讨论)提供信息。最终测试集只能在训练完成且模型选择/调优(基于验证集)结束后使用,以便对所选模型的性能进行最终、无偏的评估。
在即将到来的实践练习中,您将在MNIST数据集上训练一个分类器,请密切关注这些曲线(loss、accuracy、val_loss、val_accuracy)。观察这些趋势是应用神经网络学习中的一项基本技能。理解这些模式是解决潜在问题的第一步,这通常涉及正则化或超参数调优等技术,我们很快将介绍这些话题。
这部分内容有帮助吗?
model.fit、解释 History 对象以及指定损失函数和指标。© 2026 ApX Machine Learning用心打造