2016-10-24 24 views
1

我在Tensorflow中使用包含灰度圖像作爲輸入和整數類標籤的tfrecords文件提供簡單的ConvNet。在Tensorflow中計算正確預測的正確方法是什麼?

我的損失被定義爲loss = tf.nn.sparse_softmax_cross_entropy_with_logits(y_conv, label_batch)

其中y_conv=tf.matmul(h_fc1_drop,W_fc2) + b_fc2

label_batch是大小[batch_size]的張量。

我試圖用

correct_prediction = tf.equal(tf.argmax(label_batch,1),tf.argmax(y_conv, 1)) 
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) 

correct_prediction語句給了一個錯誤計算精度:

InvalidArgumentError (see above for traceback): Minimum tensor rank: 2 but got: 1 

我有點困惑,究竟如何計算一個正確預測在TF中。

回答

1

對於你的y_conv你做的一切都是正確的 - 它是一個形狀爲(batch_size, n_classes)的矩陣,其中對於每個樣本和每個類別,您都有可能認爲這是該圖像所屬的類別。因此,要獲得實際預測的班級,您需要撥打argmax

但是,您的標籤是整數,形狀只有(batch_size,),因爲圖像的類是已知的,並且沒有理由提供n_classes概率,單個整數也可以保持實際的類。所以你不需要打電話argmax將概率轉換爲一個類,它已經有了類。要修復它,只要做

correct_prediction = tf.equal(label_batch, tf.argmax(y_conv, 1)) 
3

因爲label_batch和y_conv是向量,所以您可能希望使用0作爲tf.argmax的維度參數。使用dimension = 1意味着張量級別至少爲2.請參閱argmax here的尺寸參數文檔。

我希望有幫助!

+0

第一個維度是樣本。當您計算精度時,dimension = 1是正確的尺寸。 – Ishamael

相關問題