与えられたmnistチュートリアルに従い、モデルをトレーニングしてその精度を評価することができました。ただし、チュートリアルでは、モデルを指定して予測を行う方法は示されていません。精度には興味がありません。モデルを使用して新しい例を予測し、出力にすべての結果(ラベル)が表示され、それぞれにスコア(並べ替えられているかどうか)が割り当てられています。
与えられたmnistチュートリアルに従い、モデルをトレーニングしてその精度を評価することができました。ただし、チュートリアルでは、モデルを指定して予測を行う方法は示されていません。精度には興味がありません。モデルを使用して新しい例を予測し、出力にすべての結果(ラベル)が表示され、それぞれにスコア(並べ替えられているかどうか)が割り当てられています。
回答:
「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つとして、予測確率を計算します。
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
、簡単なソフトマックス例えばそれが正常に動作します任意のアイデアをなぜそうなのか。?
feed_dict = {x: [your_image], keep_prob:1.0}
tf.run()
削除されたようですがy.eval(feed_dict)
、私のために働いた。
@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]
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チュートリアルを参照してください。
質問は特に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()