训练损失衡量了模型在训练过程中从训练数据学习的程度。验证损失则展示了训练好的模型在未见过的数据上的表现,帮助我们检测过拟合。
训练损失是一个指标,用于衡量深度学习模型在训练数据集上的表现。在训练过程中,模型会进行预测,并将这些预测结果与实际的目标值进行比较。然后,损失函数会计算这些预测输出与真实标签之间的误差。
训练损失是在每次前向传播和反向传播之后计算的。训练损失可以表示为:
> \text{Loss} = \frac{1}{N} \sum{i=1}^{N} L(yi, \hat{y}_i)
其中:
- N:训练样本的总数
- y_i:真实标签
- \hat{y}_i:预测输出
- L:所选的损失函数
较低的训练损失意味着模型学习得很好,而较高的训练损失通常表示欠拟合或难以学习模式。
验证损失是一个评估指标,用于衡量深度学习模型在验证数据集(模型在训练期间从未见过的数据集)上的性能。验证损失是在训练期间的每个 Epoch 之后计算的。
> \text{Validation Loss} = \frac{1}{M} \sum{i=1}^{M} L(yi^{\text{val}}, \hat{y}_i^{\text{val}})
其中:
- M:验证样本的数量
- y_i^{\text{val}}:第 i 个验证样本的真实标签
- \hat{y}_i^{\text{val}}:第 i 个验证样本的预测输出
监控这两种损失的重要性
- 检测过拟合: 如果训练损失下降但验证损失上升,这表明模型正在死记硬背训练数据。
- 检测欠拟合: 如果两种损失都保持很高,说明模型太简单或者没有很好地学习到模式。
- 超参数调整: 损失的变化趋势有助于我们调整学习率、批大小、架构和正则化。
- 泛化能力: 验证损失反映了模型在未见过的现实世界数据上的表现。
- 优化训练过程: 同时监控这两种损失有助于做出决策,例如早停和学习率调度。
分步实现
在这里,我们将在 Fashion MNIST 数据集上训练一个简单的 CNN,监控训练和验证损失,并绘制损失曲线。
步骤 1:导入库
在这里,我们将导入 TensorFlow、Keras 和 Matplotlib。
Python
CODEBLOCK_512b4141
步骤 2:加载和预处理数据集
- 将 Fashion MNIST 图像和标签加载到训练集和测试集中。
- 重塑图像以供 CNN 输入。
- 将像素值归一化到 [0, 1] 范围内。
- 将整数标签转换为独热编码。
Python
CODEBLOCK_fe87113c
步骤 3:构建 CNN 模型
- Sequential 模型: 堆叠层。
- Conv2D: 从图像中提取局部特征。
- MaxPooling2D: 减小空间尺寸和计算成本。
- Flatten(): 将 2D 特征图转换为 1D 向量。
- Dense(): 全连接层,用于学习复杂的关系。
- Dropout(): 随机丢弃神经元以减少过拟合。
Python
CODEBLOCK_f9ea7bc1
步骤 4:编译模型
- Adam 优化器: 自适应优化器,调整学习率以实现更快、更高效的训练。
- [分类交叉熵损失:](https://www.geeksforgeeks.org