【问题标题】:Why in model.evaluate() from Keras the loss is used to calculate accuracy?为什么在 Keras 的 model.evaluate() 中,损失用于计算准确性?
【发布时间】:2019-02-18 04:48:59
【问题描述】:

这可能是一个愚蠢的问题,但是:

我注意到损失函数的选择会改变评估过程中获得的准确度。

我认为损失仅在训练期间使用,当然它取决于模型在进行预测方面的优劣,而不是准确性,即正确预测的数量相对于样本总数。

EDIT

我没有正确地解释我的自我。

我的问题是因为我最近训练了一个带有 binary_crossentropy 损失的模型,并且来自 model.evaluate() 的准确度为 96%。 但它不正确! 我“手动”检查,模型得到了总预测的 44%。然后我改成categorical_crossentropy,然后准确率就对了。

MAYBE ANSWER 来自:another question

我发现了问题。 metrics=['accuracy'] 根据成本函数自动计算准确性。所以使用 binary_crossentropy 显示二进制精度,而不是分类精度。使用 categorical_crossentropy 会自动切换到分类精度,现在它与使用 model1.predict() 手动计算相同。

【问题讨论】:

  • 您是如何手动检查的?因为二进制交叉熵会改变使用的准确度指标,所以对于二进制 CE,keras 将对输出进行阈值/舍入以产生二进制预测。
  • 我在测试集上使用predict_classes 检查并计算correct_predictions/total_predictions。也许它会像你建议的那样使用精确的指标,我使用的是metrics=['accuracy'],而不是我应该使用categorical accuracy

标签: keras loss-function


【解决方案1】:

模型试图最小化选择的损失函数。它调整权重来做到这一点。不同的损失函数导致不同的权重。

这些权重决定了在样本总数中做出了多少正确预测。所以看到选择的损失函数会影响模型的准确性是正确的行为。

【讨论】:

  • 我没有正确解释自己。我的问题来了,因为我最近训练了一个带有 binary_crossentropy 损失的模型,并且来自 model.evaluate() 的准确率是 96%。但这不正确!我“手动”检查,模型得到了总预测的 44%。然后我改成categorical_crossentropy然后准确率就对了。
【解决方案2】:

Keras 根据您的损失函数选择要使用的性能指标。当您使用 binary_crossentropy 时,它虽然使用 binary_accuracy,但它的计算方式与 categorical_accuracy 不同。如果您有多个输出神经元,则应始终使用 categorical_crossentropy。

【讨论】:

    【解决方案3】:

    发件人:another question

    我发现了问题。 metrics=['accuracy'] 计算准确度 自动从成本函数。所以使用 binary_crossentropy 显示 二进制精度,而不是分类精度。使用 categorical_crossentropy 自动切换到分类 准确性,现在它与使用手动计算的相同 model1.predict().

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-13
      • 2020-08-07
      • 2019-12-22
      • 2018-05-21
      • 2020-08-25
      • 2019-10-23
      • 2016-09-29
      • 1970-01-01
      相关资源
      最近更新 更多