我正在尝试在 3002 张图片的数据集上训练 CNN 模型,对于训练,我同时使用验证集和训练集,并且必须对 90 个类别进行分类。
类不平衡,我尝试做一些增强,但这还不够,所以我使用带有权重的交叉熵来管理训练和验证期间的不平衡数据。
对于这些图,我尝试绘制各个时期的损失和准确度,但我不知道模型是否训练有素或过度拟合,而且它收敛得很快,例如,如果我使用 40 个时期,它通过以下方式达到 70 的准确度:第 11 纪元。
还有一个问题,在分析绘图后如何选择正确的纪元数?
当您在验证数据集上实现较低的损失时,您可以使用
torch.save
保存模型参数。保存的模型是最好的,并且您还可以在训练过程中打印纪元数。当训练损失持续减少而验证损失却没有减少时,您可以确认模型过度拟合。
我建议将数据分为三个子集:训练、验证和测试。使用测试数据集来评估模型的性能。
同时,使用验证数据集来监控何时停止学习过程。下面的代码演示了如何使用 max_patience 参数实现提前停止机制。例如,如果验证损失连续 3 个 epoch 没有减少,则训练过程将被中断。在训练期间以最小的验证损失保存最佳模型非常重要:
if val_loss < min_val_loss:
min_val_loss = val_loss
patience = 0
else:
patience += 1
if patience >= max_patience:
print("Stopping early due to lack of improvement in validation loss.")
break