为什么在 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().
这可能是一个愚蠢的问题但是:
我注意到损失函数的选择会修改评估期间获得的准确度。
我认为损失仅在训练期间使用,当然这取决于模型在进行预测时的好坏,而不是准确性,即正确预测的数量占样本总数的比例。
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().