【发布时间】: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 时四舍五入的参考资料吗?
-
github.com/keras-team/keras/blob/master/keras/metrics.py。见
binary_accuracy -
谢谢!如果您愿意,可以将其放入答案中,我会接受。
标签: python tensorflow machine-learning keras