Seguí los tutoriales de mnist dados y pude entrenar un modelo y evaluar su precisión. Sin embargo, los tutoriales no muestran cómo hacer predicciones dado un modelo. No me interesa la precisión, solo quiero usar el modelo para predecir un nuevo ejemplo y en la salida ver todos los resultados (etiquetas), cada uno con su puntaje asignado (ordenado o no).
tensorflow
user247866
fuente
fuente
Respuestas:
En el ejemplo " Deep MNIST for Experts ", consulte esta línea:
Simplemente tire del nodo y y tendrá lo que desea.
feed_dict = {x: [your_image]} classification = tf.run(y, feed_dict) print classification
Esto se aplica a casi cualquier modelo que cree; habrá calculado las probabilidades de predicción como uno de los últimos pasos antes de calcular la pérdida.
fuente
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop, W_fc2) + b_fc2)
I getInvalid argument: You must feed a value for placeholder tensor 'Placeholder_2' with dtype float
, para el ejemplo simple de softmax, funciona bien. ¿Alguna idea de por qué es así?)feed_dict = {x: [your_image], keep_prob:1.0}
tf.run()
parece haber sido eliminado, peroy.eval(feed_dict)
funcionó para mí.Como sugirió @dga, debe ejecutar su nueva instancia de los datos a través de su modelo ya predicho.
Aquí hay un ejemplo:
Suponga que siguió el primer tutorial y calculó la precisión de su modelo (el modelo es este :)
y = tf.nn.softmax(tf.matmul(x, W) + b)
. Ahora toma su modelo y le aplica el nuevo punto de datos. En el siguiente código calculo el vector, obteniendo la posición del valor máximo. Muestre la imagen e imprima esa posición máxima.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]
fuente
2.0 Respuesta compatible : suponga que ha construido un modelo Keras como se muestra a continuación:
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'])
Luego entrene y evalúe el modelo usando el siguiente código:
model.fit(train_images, train_labels, epochs=10) test_loss, test_acc = model.evaluate(test_images, test_labels, verbose=2)
Después de eso, si desea predecir la clase de una imagen en particular, puede hacerlo usando el siguiente código:
Si desea predecir las clases de un conjunto de imágenes, puede utilizar el siguiente código:
donde
new_images
es una matriz de imágenes.Para obtener más información, consulte este tutorial de Tensorflow .
fuente
La pregunta es específicamente sobre el tutorial de Google MNIST , que define un predictor pero no lo aplica. Siguiendo la guía de la publicación del blog TensorFlow Estimator de Jonathan Hui , aquí hay un código que se ajusta exactamente al tutorial de Google y hace predicciones:
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()
fuente