【问题标题】:Puzzled by TensorFlow nn.in_top_k output被 TensorFlow nn.in_top_k 输出迷惑
【发布时间】:2020-01-17 20:11:30
【问题描述】:

我修改了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

【问题讨论】:

  • 寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:How to create a Minimal, Complete, and Verifiable example

标签: tensorflow


【解决方案1】:

这不应该发生。

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多