tf.keras.metrics.top_k_categorical_accuracy

介绍

多分类评价函数

在categorical_accuracy的基础上加上top_k。categorical_accuracy要求样本在真值类别上的预测分数是在所有类别上预测分数的最大值,才算预测对,而top_k_categorical_accuracy只要求样本在真值类别上的预测分数排在其在所有类别上的预测分数的前k名就行。

如下图中的top-1 acc、top-5 acc

例子

比如有4个样本:
y_true为[[0, 0, 1], [0, 1, 0], [0, 1, 0], [1, 0, 0]],
y_pred为[[0.3, 0.6, 0.1], [0.5, 0.4, 0.1], [0.3, 0.6, 0.1], [0.9, 0, 0.1]]

计算得到其categorical_accuracy=50%,但是其top_k_categorical_accuracy是多少呢?
答案跟k息息相关。如果k大于或等于3,其top_k_categorical_accuracy毫无疑问是100%,因为总共就3个类别。

如果k=2,那么top_k_categorical_accuracy=75%。
具体计算方法为:

  1. 将y_true转为非onehot的形式,即y_true_new=[2, 1, 1, 0];
  2. 计算y_pred的top_k的label,比如k=2时,y_pred_new = [[0, 1], [0, 1], [0, 1], [0, 2]];
  3. 根据每个样本的真实标签是否在预测标签的top_k内来统计准确率,上述4个样本为例,2不在[0, 1]内,1在[0, 1]内,1在[0, 1]内,0在[0, 2]内,4个样本总共预测对了3个,因此k=2时top_k_categorical_accuracy=75%。

常用别名

  • tf.metrics.top_k_categorical_accuracy

语法

tf.keras.metrics.top_k_categorical_accuracy(
    y_true,
    y_pred,
    k=5
)

感谢:
https://zhuanlan.zhihu.com/p/95293440