2016-11-12 46 views
0

我修改tensorflow convnet tutorial 訓練只有兩個類。由TensorFlow困惑nn.in_top_k輸出

然後我評價使用cifar10_eval.py

我試圖理解的tf.nn.in_top_k

L128 top_k_op = tf.nn.in_top_k輸出(logits,標籤,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

問題尋求幫助調試(「爲什麼不是這樣代碼工作?「)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:[如何創建最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 – Marcs

回答

0

它不應該發生。

我評價你給的例子,並得到:

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) 

順便說一句,你可以通過一個簡單的argmax替代in_top_k(A, B, 1)

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)