为什么在 Keras 的 model.evaluate() 中使用损失来计算精度?

Why in model.evaluate() from Keras the loss is used to calculate accuracy?

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

我注意到损失函数的选择会修改评估期间获得的准确度。

我认为损失仅在训练期间使用,当然这取决于模型在进行预测时的好坏,而不是准确性,即正确预测的数量占样本总数的比例。

EDIT

我没有正确解释自己。

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

MAYBE ANSWER 来自:

I have found the problem. metrics=['accuracy'] calculates accuracy automatically from cost function. So using binary_crossentropy shows binary accuracy, not categorical accuracy. Using categorical_crossentropy automatically switches to categorical accuracy and now it is the same as calculated manually using model1.predict().

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

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

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

发件人:

I have found the problem. metrics=['accuracy'] calculates accuracy automatically from cost function. So using binary_crossentropy shows binary accuracy, not categorical accuracy. Using categorical_crossentropy automatically switches to categorical accuracy and now it is the same as calculated manually using model1.predict().