我想在喀拉拉邦获得我模型的前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)
我如何根据这些值计算实际分数?
好了,这是对我有用的代码,以防其他人偶然发现类似问题-我缺少的链接是使用“ .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来进行调整。