2

我有一个专为多分类问题设计的 LSTM 模型。训练时,准确率实际上是 1.00。但仍然返回小的损失值。这是什么意思?所有目标都被正确预测。为什么损失值不能为零?

adadelta = Adadelta(clipnorm=1.)
model.compile(optimizer=adadelta,
              loss='categorical_crossentropy',
              sample_weight_mode='temporal',
              metrics=['accuracy'])

损失值如下。

Epoch 12/12
1000/1000 [==============================] - 38s - loss: 1.2053e-04 - acc: 1.0000    
4

1 回答 1

5

网络正在优化损失。在您的情况下,损失是分类交叉熵。分类测量正确概率的对数值。

y_pred对于您的网络预测y_true为真实目标值的一个样本,情况如下:y_true是二进制的,因为您想预测它是否属于某个类别,并且y_pred是介于 0 和 1 之间的浮点数,您可以将其解释为概率属于阶级。

一个样本的公式是:

loss_sample = y_true * ln(y_pred) + (1-y_true) * ln(1-y_pred)

所以如果y_true是 1 (样本属于那个类),那么loss_sample = ln(y_pred)如果y_true是 0 ,那么loss_sample = ln(1-y_pred). 这是有道理的,因为如果y_true为 1,您希望损失尽可能小,因此您希望y_pred为 1。如果为 0,则如果接近 1 y_true,您的损失将减少,因此如果 y_pred 为 0。1-y_pred

至于准确率,如果所有样本属于正确类别的概率高于 0.5 阈值,则它将等于 1。

这意味着,如果您有一个包含 3 个样本和目标的训练集y1 = 1, y2 = 0y3 = 1并且您预测y1_hat = 0.6, y2_hat = 0.2, y3_hat = 0.9. 那么你的准确率将是 100%,但你的损失将loss = ln(0.6) + ln(1-0.2) + ln(0.9)是非零的。

总结一下:你预测属于某个类别的概率,损失计算的是正确的置信度,准确度只是根据预测做出决定,而不考虑置信度。

您可以获得完美的准确度分数,因为您的网络做出了正确的决定,但由于您的网络对结果没有完全的信心,所以您会损失积极的分数。

这更清楚吗?

于 2017-03-26T09:58:34.260 回答