TensorFlowモデルを使用して予測を行う


82

与えられたmnistチュートリアルに従い、モデルをトレーニングしてその精度を評価することができました。ただし、チュートリアルでは、モデルを指定して予測を行う方法は示されていません。精度には興味がありません。モデルを使用して新しい例を予測し、出力にすべての結果(ラベル)が表示され、それぞれにスコア(並べ替えられているかどうか)が割り当てられています。


数値を描画し、独自のデータを使用してモデルをテストできるリポジトリを作成しました。github.com/EddieOne/mnist-live-test手順は付属していません。しかし、私は概要の高いビデオを作成しました。youtube.com/watch?v=pudJU-cDkMo
エディ

回答:


73

DeepMNISTfor Experts」の例では、次の行を参照してください。

これで、回帰モデルを実装できます。たった一行!ベクトル化された入力画像xに重み行列Wを乗算し、バイアスbを追加して、各クラスに割り当てられたソフトマックス確率を計算します。

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) 私が得るInvalid argument: You must feed a value for placeholder tensor 'Placeholder_2' with dtype float、簡単なソフトマックス例えばそれが正常に動作します任意のアイデアをなぜそうなのか。?
ダニエルZakrisson

3
私自身のコメントに答えることができます:convnetの例ではfeed_dictに追加の変数がありますが、それを追加できませんでした。この場合、feed_dictは、次のようになりますfeed_dict = {x: [your_image], keep_prob:1.0}
ダニエルZakrisson

コードの出力は[FalseTrue False ...、True False True]のようになりますが、これを[3 1 3 ...、1 5 1]に変換したいのですが、Falseではなくクラスラベルが正しくありません。 。falseではなく誤って分類されたラベルを取得するにはどうすればよいですか?
Nomiluks 2016年

14
tf.run()削除されたようですがy.eval(feed_dict)、私のために働いた。
astromme 2016

この質問のより完全な考えは、github.com / tensorflow / tensorflow / issues / 97にあります。それが役立つことを願っています
Pramit 2017

16

@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]

4

2.0互換性のある回答:以下に示すようにKerasモデルを構築したとします。

model = keras.Sequential([
    keras.layers.Flatten(input_shape=(28, 28)),
    keras.layers.Dense(128, activation='relu'),
    keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

次に、以下のコードを使用してモデルをトレーニングおよび評価します。

model.fit(train_images, train_labels, epochs=10)
test_loss, test_acc = model.evaluate(test_images,  test_labels, verbose=2)

その後、特定の画像のクラスを予測する場合は、次のコードを使用して予測できます。

predictions_single = model.predict(img)

画像のセットのクラスを予測する場合は、次のコードを使用できます。

predictions = model.predict(new_images)

ここnew_imagesで、は画像の配列です。

詳細については、このTensorflowチュートリアルを参照してください。


2

質問は特にGoogleMNISTチュートリアルに関するもので、予測子を定義しますが、それを適用しません。JonathanHuiのTensorFlowEstimatorブログ投稿からのガイダンスを使用して、Googleチュートリアルに正確に適合し、予測を行うコードを次に示します。

from matplotlib import pyplot as plt

images = mnist.test.images[0:10]

predict_input_fn = tf.estimator.inputs.numpy_input_fn(
      x={"x":images},
      num_epochs=1,
      shuffle=False)

mnist_classifier.predict(input_fn=predict_input_fn)

for image,p in zip(images,mnist_classifier.predict(input_fn=predict_input_fn)):
    print(np.argmax(p['probabilities']))
    plt.imshow(image.reshape(28, 28), cmap=plt.cm.binary)
    plt.show()
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.