【问题标题】:How does the validation accuracy decide which class is correct in a binary classification with Keras?验证准确度如何决定在 Keras 的二进制分类中哪个类是正确的?
【发布时间】:2019-05-09 07:58:57
【问题描述】:

我一直在使用 Keras 和 Python 中的 Tensorflow 后端进行二进制分类。我的模型是这样创建的:

model = Sequential()
model.add(Dense(1000, input_dim=168319))
model.add(Dense(units=1, activation='sigmoid'))
model.compile(loss="binary_crossentropy",
          optimizer="adam",
          metrics=['accuracy'])

我训练后的结果是这样的:

342/1342 [==============================] - 79s 59ms/step - loss: 0.0586 - acc: 0.9911 - val_loss: 0.4632 - val_acc: 0.8169

如果我使用我的网络来预测一个样本,它会给我一个介于 [0,1] 之间的数字,因为我正在为我的输出神经元使用 sigmoid 激活函数。在对 6 个应该属于 1 类的样本进行预测后,我的输出看起来像一个示例:

[[1.        ][1.        ][0.99997437][0.18694757][0.18712251][0.9491884 ]]

由于结果都是介于 0 和 1 之间的浮点数,我一直想知道 Keras 是如何计算验证准确度的。验证准确性是使用不用于训练的测试样本来衡量的。正如这里提到的how does Keras compute validation accuracy and training accuracy?,验证准确度是用(amount of correct guesses)/(total amount of guesses) 计算的。

我的问题是,Keras 如何确定猜测属于哪个类,何时“正确”。它会在 0.5 处四舍五入吗?还是 0 到 1 之间的所有内容都被归类为“错误猜测”(预计验证准确度会低一些)?

【问题讨论】:

  • 由于您使用的是binary_crossentropy,在这种情况下,您的六个类中的每一个都会被单独评估。对于每个值,高于 0.5 的值设置为 1。低于 0.5 的值设置为 0。如果您使用的是categorical_crossentropy,则只有一个类可以为 1。概率最高的将设置为 1。其余的将是设置为 0。如果你仔细想想,binary 的情况只是categorical 的一个特例。最大值设置为 1。因此,当且仅当预测大于 0.5 时,预测才设置为 1。
  • 感谢您这么快回答!你有任何关于 Keras 在 0.5 时四舍五入的参考资料吗?
  • 谢谢!如果您愿意,可以将其放入答案中,我会接受。

标签: python tensorflow machine-learning keras


【解决方案1】:

由于您使用的是binary_crossentropy,在这种情况下,您的六个类中的每一个都会被单独评估。对于每一个值,高于 0.5 的值设置为 1。低于 0.5 的值设置为 0。如果您使用的是 categorical_crossentropy,则只有一个类可以为 1。概率最高的将设置为 1。其余的将是设置为 0。如果你仔细想想,binary 的情况只是categorical 的一个特例。最大值设置为 1。因此当且仅当预测大于 0.5 时,预测才设置为 1。

有关详细信息,请参阅 github.com/keras-team/keras/blob/master/keras/metrics.py 下的 binary_accuracy

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2019-07-14
    • 2020-08-01
    • 1970-01-01
    • 2018-10-09
    • 2018-07-20
    相关资源
    最近更新 更多