Tensorflow 当验证数据的准确性增加但损失也增加时,该怎么办?

Tensorflow 当验证数据的准确性增加但损失也增加时,该怎么办?,tensorflow,machine-learning,deep-learning,imbalanced-data,Tensorflow,Machine Learning,Deep Learning,Imbalanced Data,我目前正在研究一个高度不平衡的多类分类问题。我想保存我的模型权重以获得最佳纪元,但我不知道应该选择哪种度量 这是我的培训进度条: 我在tf.keras中使用ModelCheckpoint回调,并监控val_loss作为保存最佳模型权重的指标 如图所示 在第八纪元时,我得到了val_acc=0.9845,但val_loss=0.629,这里的精确度和召回率也很高 但在第三个纪元时,我得到了val_acc=0.9840但val_loss=0.590 我知道差异并不大,但在这种情况下,在不平衡数

我目前正在研究一个高度不平衡的多类分类问题。我想保存我的模型权重以获得最佳纪元,但我不知道应该选择哪种度量

这是我的培训进度条:

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

如图所示

  • 在第八纪元时,我得到了
    val_acc=0.9845
    ,但
    val_loss=0.629
    ,这里的精确度和召回率也很高
  • 但在第三个纪元时,我得到了
    val_acc=0.9840
    val_loss=0.590

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

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

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

这可能会有帮助

您可以将数据分为3个数据集:培训、验证和评估。沿着足够多的历元对每个网络进行训练,以跟踪训练均方误差,使其保持在最小值


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

这可能是由于几个原因造成的。假设您已经使用了正确的序列分离、测试和验证集以及数据集的预处理,如min-max scaler、调整缺失值,您可以执行以下操作

首先运行几个历元的模型,并绘制验证损失图

如果损失首先减少,而在达到某个点后,损失现在增加,如果图形为U形,则可以提前停止

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


现在,一旦您添加了辍学者,您的模型可能会突然开始表现出奇怪的行为。调整激活函数和输出节点或密集层的数量,最终会得到正确的结果。

在高度不平衡的数据集中,准确度是无用的;您应该关注精度和召回率。我还应该忽略不平衡数据集中的验证丢失吗?我的意思是,如果你看我的训练,与历元3相比,我有更好的精度和回忆在划时代8,但是如果我们考虑验证损失,它比历元3在历元8中更高。“忽略”可能不是正确的术语,但是你应该着重于你的商业度量(精度和回忆);自己的答案,可能有助于澄清这些指标与损失之间的关系(它们与准确度有关,但对于准确度和召回率的原理也是一样的)。@Desternaut谢谢。此外,在tf.keras中,每个批次的召回率和精密度都是计算出来的,并在最后(或)对完整的验证数据集进行平均。因为我读到第一个案例不是计算精确性或召回率的理想方法。我找不到关于它的任何信息。因为OP处于分类(实际上是不平衡的)设置中,所以这里对MSE的引用不正确。你可能应该用更一般的术语“损失”来代替它们。