由TensorFlow nn.in_top_k输出困惑

时间:2016-11-12 10:12:20

标签: tensorflow

我修改了tensorflow convnet tutorial 训练只有两节课。

然后我使用cifar10_eval.py

评估模型

我试图理解tf.nn.in_top_k

的输出

L128 top_k_op = tf.nn.in_top_k(logits,labels,1)

打印为:

in_top_k输出::: [array([ True, False, True, False, True, True, True, True, True, True], dtype=bool)]

而真正的标签(两个类,10个图像)是::: [0 1 1 1 1 1 1 1 1 0]

并且logits是:::

[[ 1.45472026 -1.46666598]
 [-1.0181191   1.03441548]
 [-1.02658665  1.04306769]
 [-1.19205511  1.21065331]
 [-1.22167087  1.24064851]
 [-0.89583808  0.91119087]
 [-0.17517655  0.18206072]
 [-0.09379113  0.09957675]
 [-1.05578279  1.07254183]
 [ 0.73048806 -0.73411369] ]

问题:为什么第二个和第四个nn.in_top_k()输出是False而不是True

1 个答案:

答案 0 :(得分:2)

不应该发生。

我评估了你给出的例子并得到了:

In [6]: top_k_op = tf.nn.in_top_k(logits, labels, 1)

In [7]: top_k_op.eval()
Out[7]: array([ True,  True,  True,  True,  True,  True,  True,  True,  True,  True], dtype=bool)

顺便说一下,您可以用简单的in_top_k(A, B, 1)替换argmax

In [14]: tf.equal(tf.argmax(logits, 1), labels, tf.int64).eval()
Out[14]: array([ True,  True,  True,  True,  True,  True,  True,  True,  True,  True], dtype=bool)