【问题标题】:What to do when accuracy increasing but loss is also increasing on validation data?当验证数据的准确性增加但损失也增加时该怎么办?
【发布时间】:2020-09-11 00:26:51
【问题描述】:

我目前正在研究一个高度不平衡的多类分类问题。我想保存模型权重以获得最佳时期,但我对应该选择哪个指标感到困惑?

这是我的训练进度条:

我在tf.keras 中使用ModelCheckpoint 回调并监控val_loss 作为保存最佳模型权重的指标。

如图所示,

  • 在第 8 个 epoch,我得到了 val_acc = 0.9845val_loss = 0.629 并且这里的准确率和召回率也很高。
  • 但是在第 3 个 epoch 我得到了val_acc = 0.9840val_loss = 0.590

我知道差异并不大,但在这种情况下,不平衡数据集的理想指标是什么?

【问题讨论】:

  • 准确率在高度不平衡的数据集中没有用;您应该关注精确度和召回率。
  • @desertnaut 我是否也应该忽略不平衡数据集中的验证损失?我的意思是,如果你看一下我的训练,与 epoch 3 相比,我在 epoch 8 有更好的精度和召回率,但如果我们考虑验证损失,它在 epoch 8 与 epoch 3 相比更高。
  • “忽略”可能不是正确的术语,但可以说您应该关注您的业务指标(精确度和召回率);自己的答案 herehere 可能有助于澄清这些指标和损失之间的关系(它们与准确性有关,但对于精确率和召回率来说,基本原理也是相同的)。
  • @desertnaut 谢谢。此外,在 tf.keras 中,确实为每个批次计算了召回率和精度,并在最后(或)计算了整个验证数据集的平均值。因为我读过第一种情况不是计算精度或召回率的理想方法。我找不到任何有关它的信息。

标签: tensorflow machine-learning deep-learning imbalanced-data


【解决方案1】:

最重要的因素是验证和训练错误。 如果验证损失(错误)会增加,则意味着过度拟合。您必须将 epoch 的数量设置得尽可能高,并避免过度拟合并根据错误率终止训练。 .只要它不断下降,训练就应该继续。直到模型在第 n 个时期开始收敛。事实上,它应该很好地收敛到较低的 val_loss

请记住,一个时期是一个学习周期,学习者可以在其中看到整个训练数据集。如果你有两个批次,学习者需要在一个 epoch 中经历两次迭代。

link 可能会有所帮助。

您可以将数据分为 3 个数据集,即训练、验证和评估。沿着足够数量的 epoch 训练每个网络,以跟踪训练均方误差,使其保持在最低限度。

训练过程使用训练数据集,应该逐个epoch执行,然后为验证集计算每个epoch中网络的均方误差。评估过程选择具有最小验证 MSE 的 epoch 的网络。

【讨论】:

  • 由于 OP 处于分类(并且确实是不平衡的)设置中,因此此处对 MSE 的引用不正确。您可能应该将它们替换为更通用的术语“损失”。
【解决方案2】:

这可能有几个原因。假设您已正确分离训练集、测试集和验证集,并对数据集(如 min-max scaler)进行预处理,调整缺失值,您可以执行以下操作。

首先将模型运行几个 epoch 并绘制验证损失图。

如果损失先减少,达到某个点后现在增加,如果图形是U形,那么你可以提前停止。

在其他情况下,当损失稳步增加时,提前停止将不起作用。在这种情况下,在主要层之间添加 0.2-0.3 的 dropout 层。这将在层中引入随机性,并阻止模型记忆。

现在,一旦你添加了 dropout,你的模型可能会突然开始变得奇怪。调整激活函数和输出节点或密集层的数量,它最终会变得正确。

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2018-06-11
    相关资源
    最近更新 更多