【问题标题】:Good accuracy but wrong prediction准确率高但预测错误
【发布时间】:2020-02-16 20:07:29
【问题描述】:

我已经训练了一个具有非常好的 val_accuracy 的模型,但是预测完全错误。不幸的是,类似问题的答案对我没有帮助。我的网络存在多标签问题。最终结果是为相册中的每张图片预测 3 个最佳标签。

这是我的函数,它使用预测生成输出。

def recognition(path):
    class = np.array(classes)
    for picture in os.listdir(path):
        pic = os.path.join(path, picture)
        pic = image.load_img(pic, size)
        pic = image.img_to_array(pic)
        pic = pic/255

这是我的 CNN:

model = models.Sequential()
model.add(pretrained)
model.add(layers.Dropout(0.3))
model.add(layers.Flatten())
model.add(layers.Dropout(0.3))
model.add(layers.Dense(256, activation = 'relu'))
model.add(layers.Dropout(0.3))
model.add(layers.Dense(7, activation = 'sigmoid'))

val_acc 为 0.9527。

【问题讨论】:

  • 你没有解释问题,预测到底错在哪里?
  • 我对每张图片的预测与 Ground Truth 的标签完全不符。它给了我很好的图片价值,但标签完全错误。
  • 这没有帮助,请显示一些基本事实标签与预测

标签: python keras conv-neural-network multilabel-classification


【解决方案1】:

我认为 sigmoid 没有任何问题(前提是这是一个多标签任务)。我建议您查看您的数据,尝试了解正在发生的事情。也许您的数据集与现实世界的数据完全不同(查看协变量偏移)。只要确保您没有将任何信息泄漏到验证集中即可。如果问题与数据相关,则没有简单的方法来调试正在发生的事情。

【讨论】:

    【解决方案2】:

    对于多标签问题,我认为准确性不是一个好的指标。尝试精确度和召回率。 Keras Functional model giving high validation accuracy but incorrect prediction这个讨论可能对你有用。

    【讨论】:

      【解决方案3】:

      请注意,accuracy 可能具有欺骗性。一种情况是数据为imbalanced。假设总共有 600 个样本,其中 550 个属于正类,只有 50 个属于负类。由于大多数样本属于一个类别,因此该类别的准确度将高于另一类别。 如果模型对正类做出总共 ​​530/550 个正确预测,而对负类仅做出 5/50,那么总准确度为 (530 + 5) / 600 = 0.8917。这意味着该模型的准确率为 89.17%。考虑到这一点,您可能会认为对于任何样本(无论其类别如何),该模型都可能在 89.17% 的时间内做出正确的预测。这是无效的,尤其是当您考虑模型表现不佳的 Negative 类时。

      precision 计算为正确分类的正样本数与分类样本总数之间的比率。 想象一个被别人信任的人;当他预测某事时,其他人会相信他。精度就像这个人。当精度高时,当模型将样本预测为正时,您可以信任该模型。因此,当模型说样本为正时,精度有助于了解模型的准确性。

      参考:Evaluating Deep Learning Models

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-17
        • 2020-09-28
        • 2019-05-30
        • 1970-01-01
        • 1970-01-01
        • 2018-12-30
        • 1970-01-01
        • 2020-10-17
        相关资源
        最近更新 更多