我希望获得喀拉拉邦模型的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]])
我如何根据这些值计算实际分数?
答案 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])