Supongamos que tenemos una variable:
x = tf.Variable(...)
Esta variable se puede actualizar durante el proceso de capacitación utilizando el método assign()
.
¿Cuál es la mejor manera de obtener el valor actual de una variable?
Sé que podríamos usar esto:
session.run(x)
Pero me temo que esto desencadenaría toda una cadena de operaciones.
En Theano, podrías hacer
y = theano.shared(...) y_vals = y.get_value()
Estoy buscando lo equivalente en TensorFlow.
En general, session.run(x)
evaluará solo los nodos que son necesarios para calcular x
y nada más, por lo que debería ser relativamente barato si desea inspeccionar el valor de la variable.
Echa un vistazo a esta gran respuesta https://stackoverflow.com/a/33610914/5543198 para obtener más contexto.
La única forma de obtener el valor de la variable es ejecutándola en una session
. En la FAQ está escrito que:
Un objeto Tensor es un controlador simbólico del resultado de una operación, pero en realidad no contiene los valores de la salida de la operación.
Entonces, el equivalente de TF sería:
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 parte con init = global_variables_initializer()
es importante y se debe hacer para inicializar las variables.
Además, eche un vistazo a InteractiveSession si trabaja en IPython.
tf.Print
puede simplificar tu vida!
tf.Print
imprimirá el valor del tensor (es) que le indica que imprima en el momento en que se llama a la línea tf.Print
en su código cuando se evalúa su código.
Así por ejemplo:
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]
porque imprime el valor de x
en el momento en que se encuentra la línea tf.Print
. Si en cambio lo haces
v = x.eval() print(v)
conseguirás:
[2.0 4.0]
Porque te dará el valor final de x.