Hacer predicciones con un modelo TensorFlow


Seguí los tutoriales 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 estoy interesado en 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 puntuación asignada (ordenada o no).

 66
Author: Salvador Dali, 2015-11-14

3 answers

En el ejemplo " Deep MNIST for Experts ", vea esta línea:

Ahora podemos implementar nuestro modelo de regresión. Sólo se necesita una línea! Nos multiplique las imágenes de entrada vectorizadas x por la matriz de peso W, agregue la sesgo b, y calcular las probabilidades de softmax que se asignan a cada clase.

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

Simplemente tire del nodo y y tendrá lo que quiere.

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

Esto se aplica a casi cualquier modelo que cree - habrá calculado la predicción probabilidades como uno de los últimos pasos antes de calcular la pérdida.

 62
Author: dga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-12 12:25:24

Como @dga sugirió, necesita ejecutar su nueva instancia de los datos a través de su modelo ya predicho.

Aquí hay un ejemplo:

Supongamos que pasó por 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 agarra tu modelo y aplica el nuevo punto de datos a él. En el siguiente código calculo el vector, obteniendo la posición del valor máximo. Muestra la imagen e imprime 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]
 15
Author: Salvador Dali,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-15 06:34:14

La pregunta es específicamente sobre el tutorial MNIST de Google, que define un predictor pero no lo aplica. Usando la guía de La publicación del blog TensorFlow Estimator de Jonathan Hui , aquí está el 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()
 1
Author: Lars Ericson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-23 14:33:30