web-dev-qa-db-fra.com

Comment puis-je obtenir la valeur actuelle d'une variable?

Supposons que nous ayons une variable:

x = tf.Variable(...)

Cette variable peut être mise à jour pendant le processus d'apprentissage à l'aide de la méthode assign().

Quel est le meilleur moyen d'obtenir la valeur actuelle d'une variable?

Je sais que nous pourrions utiliser ceci:

session.run(x)

Mais je crains que cela ne déclenche toute une chaîne d'opérations.

Dans Theano, vous pourriez juste faire

y = theano.shared(...)
y_vals = y.get_value()

Je cherche l'équivalent dans TensorFlow.

34
LDGN

En général, session.run(x) n'évaluera que les nœuds nécessaires au calcul de x et rien d'autre. Il devrait donc être relativement économique si vous souhaitez inspecter la valeur de la variable.

Jetez un oeil à cette excellente réponse https://stackoverflow.com/a/33610914/5543198 pour plus de contexte.

20
Rafał Józefowicz

Le seul moyen d'obtenir la valeur de la variable consiste à l'exécuter dans un session. Dans le FAQ il est écrit que:

Un objet Tensor est une poignée symbolique associée au résultat d'une opération, mais ne contient pas réellement les valeurs de la sortie de l'opération.

Donc, l'équivalent TF serait:

import tensorflow as tf

x = tf.Variable([1.0, 2.0])

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    v = sess.run(x)
    print(v)  # will show you your variable.

La partie avec init = global_variables_initializer() est importante et doit être effectuée afin d’initialiser les variables.

Regardez aussi InteractiveSession si vous travaillez en IPython.

34
Salvador Dali

tf.Print peut vous simplifier la vie!

tf.Print imprimera la valeur du ou des tenseurs que vous lui indiquez au moment où le tf.Print La ligne est appelée dans votre code lorsque votre code est évalué.

Donc par exemple:

import tensorflow as tf
x = tf.Variable([1.0, 2.0])
x = tf.Print(x,[x])
x = 2* x

tf.initialize_all_variables()

sess = tf.Session()
sess.run()

[1.0 2.0]

car il affiche la valeur de x au moment où le tf.Print _ line is. Si vous le faites plutôt

v = x.eval()
print(v)

tu auras:

[2.0 4.0]

car il vous donnera la valeur finale de x.

16
patapouf_ai