首页 > 解决方案 > 验证损失和准确性上升

问题描述

我正在使用 MLP 进行分类

这是我的模型

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(X.shape[1], X.shape[2])),
    keras.layers.Dense(2048, activation='relu'),
    keras.layers.Dropout(0.1),
    keras.layers.Dense(512, activation='relu'),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

lr_schedule = keras.optimizers.schedules.ExponentialDecay(0.00015, decay_steps=1000, decay_rate=0.96, staircase=True)
optimiser = keras.optimizers.Adam(learning_rate=lr_schedule)

model.compile(optimizer=optimiser, loss='sparse_categorical_crossentropy', metrics=['accuracy'])

我注意到训练/验证损失和准确性(图像)验证损失随着验证准确性的增加而增加。

随着准确性的提高,损失不应该减少吗?

标签: kerasdeep-learningloss

解决方案


我建议结帐这篇文章。另一个没有提到但我认为值得注意的方面是数据集中的类平衡。由于您使用 Softmax 作为最后一层,例如多类分类,因此您观察到验证损失增加验证准确度增加的原因可能是因为您的数据在每个标签(类)存在多少观察方面不平衡。您的分类器在确定最常见的类时变得更好(更准确),但在更稀有的类中变得更糟(不太准确)。您可以说您正在“过度拟合”您的模型以更频繁地预测常见类别。

因此,由于您的分类器更频繁地总体正确,因此准确性会提高,但损失也会增加,因为稀有类的损失会变大(因为它预测它们的概率为 0)。

为了解决这个问题,您可以对数据进行上采样或下采样,或者按照此处所述设置类权重。


推荐阅读