Keras softmax 输出和准确性

o_y*_*eah 7 python neural-network keras tensorflow

这是 Keras 模型的最后一层。

model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
Run Code Online (Sandbox Code Playgroud)

我知道softmax层的输出是一个数组,概率之和为1,比如[0.1, 0.4, 0.5]

我有一个关于使用准确性作为指标的问题。

例如,当真实类别为[0, 0, 1]且预测概率为 时[0.1, 0.4, 0.5],即使0.5是最大概率,该预测的准确性也应该为0,因为0.5 != 1。那是对的吗?

更一般地,当输出层激活为 时softmax,我们通常会得到浮动概率预测,并且很少有机会得到像 那样的整数概率预测 [0, 0, 1]。所以我们在用作激活时不能用作accuracy指标。softmax那是对的吗?

Hem*_*con 5

例如,当真实类别为 [0, 0, 1] 且预测概率为 [0.1, 0.4, 0.5] 时,即使 0.5 是最大概率,该预测的准确度也应该为 0,因为 0.5 != 1。正确吗?

不会。您将具有最大值的索引视为模型的预测。因此,在您的示例中,此示例预测将有助于提高准确性。这通常称为 Top-1 准确度。在图像分类中,也经常使用 Top-5 精度(softmax 层中的前 5 个最大值被视为 NN 的猜测,并考虑它们的精度)。

更一般地,当输出层激活为 softmax 时,我们通常会得到浮动概率预测,并且很少有机会得到像 [0, 0, 1] 这样的整数概率预测。所以我们在使用softmax作为激活时不能使用准确率作为衡量标准。那是对的吗?

从技术上讲,您永远不会获得 softmax 层输出的整数值,因为类型是浮点型。但是,是的,获得 [0.0, 0.0, 1.0] 的机会非常小。你的这个假设是不正确的,因为前提不成立。然而,当使用 Softmax 作为神经网络的分类层时,准确性是一个有效的指标。

  • 我刚刚尝试了 `model.evaluate(x=[[1., 2., 3.]], y=[[0,0,1,0]],)` 它按预期工作,成功预测了最大值索引作为它的类。谢谢回答。 (3认同)