TensorFlow SparseCategoricalAccuracy度量标准计算

时间:2019-12-15 08:48:26

标签: python-3.x tensorflow

我正在尝试使用TensorFlow的'SparseCategoricalAccuracy'[TensorFlow 2.0]来计算精度,并且对计算值和我手动计算的值感到困惑-

m = tf.keras.metrics.SparseCategoricalAccuracy()

m.update_state(
    y_true = [[2], [1], [3]],
    y_pred = [[0.1, 0.9, 0.8], [0.05, 0.95, 0], [0.02, 0.5, 0.8]],
    sample_weight = [1, 1, 1]
    # or-
    # sample_weight = None
    )

m.result().numpy()
# 0.33333334

在这里,由于'y_pred'中的第一个和第三个预测与y_true'相匹配,因此准确性不应该是66.67%而不是33.33%吗?

再次

m.reset_states()                                                       

y_pred = [[0.1, 0.4, 0.8], [0.05, 0.95, 0], [0.2, 0.1, 0.7]]           
m.update_state(y_true=y_true, y_pred=y_pred, sample_weight=None)

m.result().numpy()                                                     
# 0.6666667


y_true                                                                 
# [[2], [1], [3]]

y_pred                                                                 
# [[0.1, 0.4, 0.8], [0.05, 0.95, 0], [0.2, 0.1, 0.7]]

在这里,准确度应为33.33%,因为只有y_pred之一,即第三个预测与y_true相匹配

我在做什么错了?

谢谢?

1 个答案:

答案 0 :(得分:1)

您的标签需要零索引。这样您将获得正确的准确性。

m = tf.keras.metrics.SparseCategoricalAccuracy()

m.update_state(
    # We have changed y_true = [[2], [1], [3]] to the following
    y_true = [[1], [0], [2]],
    y_pred = [[0.1, 0.9, 0.8], [0.05, 0.95, 0], [0.02, 0.5, 0.8]],
    sample_weight = [1, 1, 1]
    # or-
    # sample_weight = None
    )

m.result().numpy()