gpt4 book ai didi

python - 即使 keras 中的精度为 1.00,categorical_crossentropy 也会返回较小的损失值

转载 作者:太空宇宙 更新时间:2023-11-04 00:38:02 25 4
gpt4 key购买 nike

我有一个专为多分类问题设计的 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

最佳答案

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

网络预测的一个样本 y_pred 是这样的,y_true 是真正的目标值:y_true 是二进制的,因为你想要预测它是否属于某个类别,y_pred 是一个介于 0 和 1 之间的 float ,您可以将其解释为属于该类别的概率。

一个样本的公式是:

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。如果 y_true 为 0,如果 1-y_pred 接近 1,你的损失会减少,所以如果 y_pred 为 0。

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

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

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

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

是不是更清楚了?

关于python - 即使 keras 中的精度为 1.00,categorical_crossentropy 也会返回较小的损失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43025416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com