web-dev-qa-db-fra.com

Faire des prédictions avec un modèle TensorFlow

J'ai suivi les tutoriels donnés par les mnististes et j'ai pu former un modèle et évaluer sa précision. Cependant, les tutoriels ne montrent pas comment faire des prédictions à partir d'un modèle. La précision ne m'intéresse pas, je souhaite simplement utiliser le modèle pour prédire un nouvel exemple et voir dans la sortie tous les résultats (libellés), chacun avec le score qui lui est attribué (trié ou non).

76
user247866

Dans l'exemple " Deep MNIST for Experts ", voir cette ligne:

Nous pouvons maintenant mettre en œuvre notre modèle de régression. Cela ne prend qu'une ligne! Nous multiplions les images d'entrée vectorisées x par la matrice de pondération W, additionnons le biais b et calculons les probabilités softmax attribuées à chaque classe.

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

Tirez simplement sur le nœud y et vous aurez ce que vous voulez.

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

Ceci s'applique à presque tous les modèles que vous créez. Vous aurez calculé les probabilités de prédiction comme l'une des dernières étapes avant de calculer la perte.

70
dga

Comme @dga l'a suggéré, vous devez exécuter votre nouvelle instance de données via votre modèle déjà prédit.

Voici un exemple:

Supposons que vous ayez suivi le premier tutoriel et calculé la précision de votre modèle (le modèle est le suivant: y = tf.nn.softmax(tf.matmul(x, W) + b)). Vous devez maintenant saisir votre modèle et y appliquer le nouveau point de données. Dans le code suivant, je calcule le vecteur, obtenant la position de la valeur maximale. Affichez l'image et imprimez cette position maximale.

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]
16
Salvador Dali

La question concerne spécifiquement le tutoriel Google MNIST , qui définit un prédicteur mais ne l'applique pas. En utilisant les conseils de article de blog TensorFlow Estimator de Jonathan Hui , voici le code qui correspond exactement au didacticiel de Google et qui fait des prédictions:

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()
2
Lars Ericson