我修改了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
?
答案 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)