2016-10-24 4 views
1

入力と整数クラスラベルとしてグレースケールイメージを含むtfrecordsファイルを使用して、Tensorflowで簡単な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ステートメントはエラー与えている

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

を使用することにより、精度を計算しようとしている:私はどのように正確に一つのとして少し混乱してい

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

は正しい予測を計算しますTFで。

答えて

1

y_convの場合は、形状はすべて(batch_size, n_classes)の行列です。各サンプルと各クラスについて、画像が属するクラスである可能性があります。実際の予測クラスを取得するには、argmaxに電話する必要があります。

イメージのクラスが既知であり、確率がn_classesになる理由はないので、ラベルは整数であり、形状はちょうど(batch_size,)です。実際のクラスも単一の整数で保持できます。したがって、確率をクラスに変換するためにargmaxを呼び出す必要はありません。すでにクラスがあります。それを修正するには、

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

label_batchとy_convはベクトルなので、おそらくtf.argmaxの次元引数に0を使用します。 dimension = 1を使用すると、少なくとも2のテンソルランクを意味します。argmax hereのdimensionパラメータのドキュメントを参照してください。

私はそれが助けてくれることを願っています!

+0

最初の次元はサンプルです。精度を計算するときは、dimension = 1が正しい次元です。 – Ishamael

関連する問題