我正在尝试使用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相匹配
我在做什么错了?
谢谢?
答案 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()