web-dev-qa-db-fra.com

TensorFlow: questions sur tf.argmax () et tf.equal ()

J'apprends le TensorFlow, en construisant un modèle multicouche_perceptron. Je suis en train de regarder quelques exemples comme celui sur: 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 demande ce que signifient tf.argmax(prod,1) et tf.argmax(y,1) et renvoient (type et valeur) exactement? Et correct_prediction Est-il une variable plutôt que des valeurs réelles?

Enfin, comment pouvons-nous obtenir le tableau y_test_prediction (Le résultat de la prédiction lorsque les données d'entrée sont X_test) À partir de la session tf? Merci beaucoup!

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

Retourne l'index avec la plus grande valeur sur l'axe d'un tenseur.

l'entrée est un tenseur et l'axe décrit quel axe du tenseur d'entrée doit être réduit. 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]])

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

Evaluer 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)) renvoie un tenseur dont l'évaluation donneraarray(1,1,1,1,1,1).

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

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

La documentation pour tf.argmax et tf.equal est accessible en suivant les liens ci-dessous.

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

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

42
Ulrich.T

Lecture de la documentation:

tf.argmax

Retourne l'index avec la plus grande valeur sur les axes d'un tenseur.

tf.equal

Renvoie la valeur de vérité de (x == y) élément par élément.

tf.cast

Jette 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 que ça fait. Votre y est encodé à chaud, il en a donc un 1 et tous les autres sont nuls. Votre pred représente les probabilités de classes. Ainsi, argmax trouve les positions de la meilleure prédiction et de la valeur correcte. Après cela, vérifiez si elles sont identiques.

Alors maintenant, votre correct_prediction est un vecteur de valeurs True/False de taille égale au nombre d'instances que vous souhaitez prédire. Vous le convertissez en float et prenez la moyenne.


En fait, cette partie est bien expliquée dans tutoriel TF dans la partie Evaluer le modèle

15
Salvador Dali

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

Retourne l'index avec la plus grande valeur sur l'axe d'un tenseur.

Pour le cas en particulier, il reçoit pred en tant qu'argument, car il s'agit de input et de 1 En tant que axis. L'axe décrit quel axe du tenseur d'entrée à réduire en travers. Pour les vecteurs, utilisez axis = 0.

Exemple: étant donné la liste [2.11,1.0021,3.99,4.32], Argmax retournera 3, Qui est l'index de la valeur la plus élevée.


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


y_test_prediction devrait être votre tenseur correct_prediction.

1
BernardoGO