TensorFlow: questions concernant tf.argmax() et tf.égal()

j'apprends le TensorFlow, en construisant un modèle multicayer_perceptron. Je regarde quelques exemples comme celui de: https://github.com/aymericdamien/TensorFlow-Examples/blob/master/notebooks/3_NeuralNetworks/multilayer_perceptron.ipynb

j'ai ensuite quelques questions dans le code ci-dessous:

def multilayer_perceptron(x, weights, biases):
    :
    :

pred = multilayer_perceptron(x, weights, biases)
    :
    :

with tf.Session() as sess:
    sess.run(init)
         :
    correct_prediction = tf.equal(tf.argmax(pred, 1), tf.argmax(y, 1))

    accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float"))
    print ("Accuracy:", accuracy.eval({x: X_test, y: y_test_onehot}))

je me demandais quoi faire tf.argmax(prod,1) et tf.argmax(y,1) moyenne et rendement (type et valeur) exactement? Et n'est correct_prediction une variable au lieu d'un vrai valeurs?

enfin, comment obtenir le y_test_prediction tableau (le résultat de la prédiction lorsque les données d'entrée sont X_test) de la session tf? Merci beaucoup!

22
demandé sur Edamame 2017-01-18 02:00:48

3 réponses

tf.argmax(input, axis=None, name=None, dimension=None)

renvoie l'indice avec la plus grande valeur à travers l'axe d'un tenseur.

input est un tenseur et axis décrit quel axe du tenseur d'entrée réduire à travers. Pour les vecteurs, utilisez axis = 0.

pour votre cas spécifique, utilisons deux tableaux et démontrons ceci

pred = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])

y = np.array([[31, 23,  4, 24, 27, 34],
                [18,  3, 25,  0,  6, 35],
                [28, 14, 33, 22, 20,  8],
                [13, 30, 21, 19,  7,  9],
                [16,  1, 26, 32,  2, 29],
                [17, 12,  5, 11, 10, 15]])

l'Évaluation de tf.argmax(pred, 1) donne un tenseur dont l'évaluation donnera array([5, 5, 2, 1, 3, 0])

l'Évaluation de tf.argmax(y, 1) donne un tenseur dont l'évaluation donnera array([5, 5, 2, 1, 3, 0])

tf.equal(x, y, name=None) takes two tensors(x and y) as inputs and returns the truth value of (x == y) element-wise. 

suivant notre exemple,tf.equal(tf.argmax(pred, 1),tf.argmax(y, 1)) retourne un tenseur dont l'évaluation donneraarray(1,1,1,1,1,1).

corrigt_prediction est un tenseur dont l'évaluation donnera un tableau 1-D de 0 et 1's

y_test_prediction peut être obtenu en exécutant pred = tf.argmax(logits, 1)

la documentation pour tf.argmax et tf.l'égalité peut être consulté en suivant les liens ci-dessous.

tf.argmax() https://www.tensorflow.org/api_docs/python/math_ops/sequence_comparison_and_indexing#argmax

tf.l'égalité () https://www.tensorflow.org/versions/master/api_docs/python/control_flow_ops/comparison_operators#equal

31
répondu Ulrich.T 2017-01-25 22:46:35

Lecture de la documentation:

tf.argmax

renvoie l'indice avec la plus grande valeur à travers les axes d'un tenseur.

tf.equal

renvoie la valeur de vérité de (x == y) au niveau de l'élément.

tf.cast

lance un tenseur à un nouveau type.

tf.reduce_mean

calcule la moyenne des éléments à travers les dimensions d'un tenseur.


Maintenant, vous pouvez facilement expliquer ce qu'il fait. Votre y est un chaud codé, donc il y a un 1 et tous les autres sont nuls. Votre pred représente les probabilités des classes. Donc argmax trouve les positions de la meilleure prédiction et la valeur correcte. Après que vous vérifiez qu'ils sont identiques.

Alors maintenant, votre correct_prediction est un vecteur de valeurs True / False avec la taille égale à nombre d'instances que vous voulez prévoir. Vous le convertissez en flotteurs et prenez la moyenne.


en fait cette partie est bien expliquée dans tutorial TF dans le Evaluer le modèle partie

12
répondu Salvador Dali 2017-04-21 09:06:47

tf.argmax(entrée, axe=None, nom=None, dimension=None)

renvoie l'indice avec la plus grande valeur à travers l'axe d'un tenseur.

Pour le cas spécifique, il reçoit pred comme argument input et 1axis. L'axe décrit l'axe du tenseur d'entrée à réduire en travers. Pour les vecteurs, utilisez axis = 0.

exemple: vu la liste [2.11,1.0021,3.99,4.32] argmax reviendra 3 ce qui est l'indice de la valeur la plus élevée.


correct_prediction est un tenseur qui seront évalués ultérieurement. Ce n'est pas une variable python régulière. Il contient les informations nécessaires pour calculer la valeur plus tard. Pour ce cas précis, il fera partie d'un autre tenseur accuracy = tf.reduce_mean(tf.cast(correct_prediction, "float")) et sera évalué par evalaccuracy.eval({x: X_test, y: y_test_onehot}).


y_test_prediction devrait être votre correct_prediction tenseur.

0
répondu BernardoGO 2017-01-18 00:10:31