模型训练中的过度拟合

问题描述 投票:0回答:2

我正在尝试在 3002 张图片的数据集上训练 CNN 模型,对于训练,我同时使用验证集和训练集,并且必须对 90 个类别进行分类。

类不平衡,我尝试做一些增强,但这还不够,所以我使用带有权重的交叉熵来管理训练和验证期间的不平衡数据。

对于这些图,我尝试绘制各个时期的损失和准确度,但我不知道模型是否训练有素或过度拟合,而且它收敛得很快,例如,如果我使用 40 个时期,它通过以下方式达到 70 的准确度:第 11 纪元。

还有一个问题,在分析绘图后如何选择正确的纪元数?

Loss function for validation and training

Accuracy for validation and training

python deep-learning pytorch conv-neural-network multilabel-classification
2个回答
0
投票

当您在验证数据集上实现较低的损失时,您可以使用

torch.save
保存模型参数。保存的模型是最好的,并且您还可以在训练过程中打印纪元数。当训练损失持续减少而验证损失却没有减少时,您可以确认模型过度拟合。


0
投票

我建议将数据分为三个子集:训练、验证和测试。使用测试数据集来评估模型的性能。

同时,使用验证数据集来监控何时停止学习过程。下面的代码演示了如何使用 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
© www.soinside.com 2019 - 2024. All rights reserved.