Ich folgte den gegebenen mnist-Tutorials und konnte ein Modell trainieren und seine Genauigkeit bewerten. Die Tutorials zeigen jedoch nicht, wie man anhand eines Modells Vorhersagen trifft. Ich bin nicht an Genauigkeit interessiert, ich möchte nur das Modell verwenden, um ein neues Beispiel vorherzusagen, und in der Ausgabe werden alle Ergebnisse (Beschriftungen) mit der zugewiesenen Punktzahl (sortiert oder nicht) angezeigt.
tensorflow
user247866
quelle
quelle
Antworten:
Im Beispiel " Deep MNIST for Experts " finden Sie diese Zeile:
Ziehen Sie einfach am Knoten y und Sie haben das, was Sie wollen.
feed_dict = {x: [your_image]} classification = tf.run(y, feed_dict) print classification
Dies gilt für nahezu jedes Modell, das Sie erstellen. Sie haben die Vorhersagewahrscheinlichkeiten als einen der letzten Schritte berechnet, bevor Sie den Verlust berechnen.
quelle
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
I erhaltenInvalid argument: You must feed a value for placeholder tensor 'Placeholder_2' with dtype float
, aus dem einfachen softmax Beispiel funktioniert es gut Irgendwelche Ideen , warum dies so ist.?feed_dict = {x: [your_image], keep_prob:1.0}
tf.run()
scheint entfernt worden zu sein, hat abery.eval(feed_dict)
für mich gearbeitet.Wie von @dga vorgeschlagen, müssen Sie Ihre neue Instanz der Daten über Ihr bereits vorhergesagtes Modell ausführen.
Hier ist ein Beispiel:
Angenommen, Sie haben das erste Tutorial durchgearbeitet und die Genauigkeit Ihres Modells berechnet (das Modell lautet :)
y = tf.nn.softmax(tf.matmul(x, W) + b)
. Jetzt greifen Sie zu Ihrem Modell und wenden den neuen Datenpunkt darauf an. Im folgenden Code berechne ich den Vektor und erhalte die Position des Maximalwerts. Zeigen Sie das Bild und drucken Sie diese maximale Position.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]
quelle
2.0-kompatible Antwort : Angenommen, Sie haben ein Keras-Modell wie unten gezeigt erstellt:
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'])
Trainieren und bewerten Sie das Modell anschließend mit dem folgenden Code:
model.fit(train_images, train_labels, epochs=10) test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
Wenn Sie danach die Klasse eines bestimmten Bildes vorhersagen möchten, können Sie dies mit dem folgenden Code tun:
Wenn Sie die Klassen einer Reihe von Bildern vorhersagen möchten, können Sie den folgenden Code verwenden:
Wo
new_images
ist ein Array von Bildern.Weitere Informationen finden Sie in diesem Tensorflow-Tutorial .
quelle
Die Frage bezieht sich speziell auf das Google MNIST-Lernprogramm , das einen Prädiktor definiert, ihn jedoch nicht anwendet. Unter Verwendung der Anleitung aus Jonathan Huis TensorFlow Estimator-Blogbeitrag finden Sie hier Code, der genau zum Google-Tutorial passt und Vorhersagen macht:
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()
quelle