Train Accuracy增加,Train loss稳定,Validation loss增加,Validation Accuracy低且增加
Train Accuracy increases, Train loss is stable, Validation loss Increases, Validation Accuracy is low and increases
我在 pytorch 中的神经网络训练变得非常奇怪。
我正在训练一个 已知 数据集,该数据集分为训练和验证。
我在训练期间对数据进行洗牌,并即时进行数据扩充。
我有这些结果:
训练精度从 80% 开始并增加
火车损失减少并保持稳定
验证准确率从 30% 开始,但增加缓慢
验证损失增加
我要显示以下图表:
如何解释验证损失增加,验证准确率增加?
验证集和训练集的准确率怎么会有这么大的差异? 90% 和 40%?
更新:
我平衡了数据集。
它是二进制class化。它现在有来自 class 1 的 1700 个示例,来自 class 2 的 1200 个示例。总共 600 个用于验证,2300 个用于训练。
我仍然看到类似的行为:
**会不会是我冻结了部分网络的权重?
**会不会是因为像 lr 这样的超参数?
如果训练集与验证集相比非常大,您更有可能过度拟合并学习训练数据,这会使模型的泛化变得非常困难。我看到您的训练精度为 0.98,而您的验证精度增长速度非常慢,这意味着您的训练数据过拟合。
尝试减少训练集中的样本数量,以提高模型对未知数据的泛化能力。
我找到了解决方案:
我对训练集和验证集进行了不同的数据扩充。匹配它们也提高了验证的准确性!
我先回答你的第二个问题。训练数据的高精度和 val/test 数据的低精度表明该模型可能无法很好地概括以推断真实案例。这就是验证过程的全部内容。您需要微调甚至重建您的模型。
关于第一个问题,val loss 不一定对应于 val accuracy。该模型根据其模型进行预测,如果您使用交叉熵函数,则损失函数会计算矩阵概率与目标概率之间的差异。
我在 pytorch 中的神经网络训练变得非常奇怪。
我正在训练一个 已知 数据集,该数据集分为训练和验证。 我在训练期间对数据进行洗牌,并即时进行数据扩充。
我有这些结果:
训练精度从 80% 开始并增加
火车损失减少并保持稳定
验证准确率从 30% 开始,但增加缓慢
验证损失增加
我要显示以下图表:
如何解释验证损失增加,验证准确率增加?
验证集和训练集的准确率怎么会有这么大的差异? 90% 和 40%?
更新:
我平衡了数据集。 它是二进制class化。它现在有来自 class 1 的 1700 个示例,来自 class 2 的 1200 个示例。总共 600 个用于验证,2300 个用于训练。 我仍然看到类似的行为:
**会不会是我冻结了部分网络的权重?
**会不会是因为像 lr 这样的超参数?
如果训练集与验证集相比非常大,您更有可能过度拟合并学习训练数据,这会使模型的泛化变得非常困难。我看到您的训练精度为 0.98,而您的验证精度增长速度非常慢,这意味着您的训练数据过拟合。
尝试减少训练集中的样本数量,以提高模型对未知数据的泛化能力。
我找到了解决方案: 我对训练集和验证集进行了不同的数据扩充。匹配它们也提高了验证的准确性!
我先回答你的第二个问题。训练数据的高精度和 val/test 数据的低精度表明该模型可能无法很好地概括以推断真实案例。这就是验证过程的全部内容。您需要微调甚至重建您的模型。
关于第一个问题,val loss 不一定对应于 val accuracy。该模型根据其模型进行预测,如果您使用交叉熵函数,则损失函数会计算矩阵概率与目标概率之间的差异。