Keras:如何获得top-k精度

Aar*_*nDT 6 python keras

我想在喀拉拉邦获得我模型的前k位精度。

我在这里找到了一个帖子:如何计算喀拉拉邦的top5准确性?建议以下内容:

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))
Run Code Online (Sandbox Code Playgroud)

输出只给了我两个数组:

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)
Run Code Online (Sandbox Code Playgroud)

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]])
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*nDT 7

好了,这是对我有用的代码,以防其他人偶然发现类似问题-我缺少的链接是使用“ .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)
Run Code Online (Sandbox Code Playgroud)

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