Keras:如何获得top-k精度

时间:2018-08-21 14:49:25

标签: python keras

我希望获得喀拉拉邦模型的top-k精度。

我在这里找到了一条信息:How to calculate top5 accuracy in keras?,其中提出了以下建议:

from keras import backend as K
import tensorflow as tf

top_values, top_indices = K.get_session().run(tf.nn.top_k(_pred_test, k=5))

输出仅给我两个数组:

top_values:

array([[1., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0.],
       ...,
       [1., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0.],
       [1., 0., 0., 0., 0.]], dtype=float32)

top_indices:

array([[12,  0,  1,  2,  3],
       [13,  0,  1,  2,  3],
       [15,  0,  1,  2,  3],
       ...,
       [12,  0,  1,  2,  3],
       [17,  0,  1,  2,  3],
       [18,  0,  1,  2,  3]])

我如何根据这些值计算实际分数?

3 个答案:

答案 0 :(得分:4)

好吧,这是对我有用的代码,以防其他人偶然发现类似问题-我缺少的链接是在使用“ .evaluate”:

import functools
top3_acc = functools.partial(keras.metrics.top_k_categorical_accuracy, k=3)

top3_acc.__name__ = 'top3_acc'

model.compile(Adam(lr=.001),#
    optimizers.RMSprop(lr=2e-5),
        loss='categorical_crossentropy',
        metrics=['accuracy','top_k_categorical_accuracy',top3_acc])

    model.evaluate(X_test, y_test)

其中“ top_k_categorical_accuracy”为我提供了k = 5(标准)的得分,并且可以通过在函数调用中更改k = 3来调整top3_acc。

答案 1 :(得分:1)

或者,

from keras.metrics import top_k_categorical_accuracy

def topKacc(Y_true, Y_pred):
  return top_k_categorical_accuracy(Y_true, 
                                    Y_pred, 
                                    k = int_here)
metrics = [topKacc, ...]

model.compile(...,
              metrics=metrics)

答案 2 :(得分:1)

这是另一种简单的方法。

def top_3_accuracy(y_true, y_pred):
    return top_k_categorical_accuracy(y_true, y_pred, k=3)

model.compile(..........., metrics=[top_3_accuracy])