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!
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
Lecture de la documentation:
renvoie l'indice avec la plus grande valeur à travers les axes d'un tenseur.
renvoie la valeur de vérité de (x == y) au niveau de l'élément.
lance un tenseur à un nouveau type.
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
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 1
axis
. 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 eval
accuracy.eval({x: X_test, y: y_test_onehot})
.
y_test_prediction devrait être votre correct_prediction
tenseur.