2017-07-03 3 views
1

Je forme un réseau de neurones convolutif (CNN) avec TensorFlow. Lorsque la formation est terminée, je calcule la précision avec le code suivant:Comment obtenir la valeur de chaque noeud de sortie pendant eval MNIST testdata dans TensorFlow?

... 
correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)) 
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32)) 
eval_batch_size = 1 
good = 0 
total = 0 
for i in range(int(mnist.test.num_examples/eval_batch_size)): 
    testSet = mnist.test.next_batch(eval_batch_size, shuffle=False) 
    good += accuracy.eval(feed_dict={ x: testSet[0], y: testSet[1]}) 
    total += testSet[0].shape[0] 
accuracy_eval = good/total 

Pour « bien » j'obtenir la valeur 1.0 lorsque l'image de test est correcte détectée et la valeur 0.0 sinon.

Je veux obtenir les valeurs pour les dix nœuds de sortie. Par exemple, j'évalue une image de test avec un "8" manuscrit alors peut-être le noeud de sortie pour le nombre "8" est 0.6 et pour le nombre "3" est 0.3 et pour "5" est 0.05 et le dernier 0.05 sur les sept autres noeuds de sortie.

Alors, comment puis-je obtenir toutes ces dix valeurs pour chaque image de test dans TensorFlow?

Répondre

1

Vous pouvez le faire en ajoutant la ligne suivante:

pred=prediction.eval(feed_dict={ x: testSet[0], y: testSet[1]}) 

juste après

testSet = mnist.test.next_batch(eval_batch_size, shuffle=False) 

Alors pred sera un tableau qui contient 1 vecteur de probabilité, et c'est le vecteur qui vous intéresse dans

+0

Merci @MiriamFarbe! C'est ce que je cherchais. Je suis peu confus au sujet des valeurs dans ce vecteur de probabilité, je m'attendais à des nombres entre 0.0 et 1.0. Mais par exemple, j'obtiens ceci: "-45049.1328125 6181.90087891 -26765.70117188 -40108.9609375 44725.2578125 60644.22265625 72028.3515625 -38615.09375 23696.48046875 -9353.94628906". Avez-vous des mots-clés ou des liens que je peux rechercher pour comprendre cela? – Freundlicher

+1

@Freundlicher il semble que vous n'avez pas appliqué softmax (https://en.wikipedia.org/wiki/Softmax_function) sur votre sortie. La fonction softmax transforme un vecteur en vecteur de probabilité. Par la définition de softmax, argmax (prédiction, 1) et argmax (softmax (prédiction), 1) seront égaux. Pourtant, ce dernier est plus facile à interpréter et souvent utilisé dans l'évaluation de la fonction de perte. –

+0

@Freundlicher En plus de mon précédent commentaire, vous pouvez voir ici que softmax est appliqué en interne dans le modèle: https://www.tensorflow.org/get_started/mnist/pros#predicted_class_and_loss_function, alors que https: //www.tensorflow .org/get_started/mnist/beginners # implementation_the_regression est appliqué explicitement (dans la ligne y = ...) –