2015-11-14 14 views
54

私は与えられたmnistチュートリアルに従い、モデルを訓練し、その精度を評価することができました。しかし、チュートリアルでは、モデルを使って予測を行う方法は示されていません。私は正確さには関心がありません、私はちょうど新しい例を予測するためにモデルを使用したいと思います。結果には、割り当てられたスコア(ソートされているかどうか)を持つすべての結果(ラベル)が表示されます。 「Deep MNIST for Experts」の例ではTensorFlowモデルで予測する

+0

番号を描画し、独自のデータでモデルをテストできるリポジトリを作成しました。 https://github.com/EddieOne/mnist-live-testそれは指示が付属していません。私はしかし、高レベルの概要でビデオを作った。 https://www.youtube.com/watch?v=pudJU-cDkMo – Eddie

答えて

53

、この行を参照してください。私たちは、今、私たちの回帰モデルを実装することができます

を。それは1行しかかかりません! ベクトル化された入力画像xに重み行列Wを掛け、 バイアスbを加え、各クラス に割り当てられたsoftmax確率を計算します。

y = tf.nn.softmax(tf.matmul(x,W) + b) 

ただ、ノードyを引っ張ると、あなたが欲しいものがあるでしょう。

feed_dict = {x: [your_image]} 
classification = tf.run(y, feed_dict) 
print classification 

これは、あなたが作成するほぼすべてのモデルに適用されます。損失を計算する前の最後のステップの1つとして予測確率を計算します。

+1

この提案をconvnetの例( 'y_conv = tf.nn.softmax(tf.matmul(h_fc1_drop、W_fc2)+ b_fc2)')でテストすると、私はget '無効な引数:プレースホルダのテンソル 'Placeholder_2'の値をdtype float'で指定しなければなりません。これはうまく動作する単純なsoftmaxの例です。 –

+3

自分のコメントに答えることができます:convnetの例feed_dict = {x:[your_image]、keep_prob:1.0} ' –

+0

あなたのコードの出力は[FalseのようなものになりますTrue False ...、True False True]、しかしこれを[3 1 3 ...、1 5 1]に変換したいのですが、これはFalseではなくクラスラベルを間違っています。 –

12

@dgaが示唆しているように、既に予測されたモデルを使用してデータの新しいインスタンスを実行する必要があります。ここで

は一例です:

あなたが(:y = tf.nn.softmax(tf.matmul(x, W) + b)モデルがこれです)最初のチュートリアルかかわらず行ってきましたし、モデルの精度を算出したとします。これで、モデルを取得し、新しいデータポイントをそのモデルに適用します。次のコードでは、ベクトルを計算し、最大値の位置を取得します。画像を表示し、その最大位置を印刷します。

from matplotlib import pyplot as plt 
from random import randint 
num = randint(0, mnist.test.images.shape[0]) 
img = mnist.test.images[num] 

classification = sess.run(tf.argmax(y, 1), feed_dict={x: [img]}) 
plt.imshow(img.reshape(28, 28), cmap=plt.cm.binary) 
plt.show() 
print 'NN predicted', classification[0] 
関連する問題