Solución:
Lo más fácil[A] forma de evaluar el valor real de un Tensor
El objetivo es pasarlo a la Session.run()
método, o llamar Tensor.eval()
cuando tienes una sesión predeterminada (es decir, en una with tf.Session():
bloquear, o ver más abajo). En general[B], no puede imprimir el valor de un tensor sin ejecutar algún código en una sesión.
Si está experimentando con el modelo de programación y desea una forma fácil de evaluar tensores, el tf.InteractiveSession
le permite abrir una sesión al comienzo de su programa, y luego usar esa sesión para todos Tensor.eval()
(y Operation.run()
) llamadas. Esto puede ser más fácil en un entorno interactivo, como el shell o un cuaderno IPython, cuando es tedioso pasar un Session
objeto en todas partes. Por ejemplo, lo siguiente funciona en un cuaderno de Jupyter:
with tf.Session() as sess: print(product.eval())
Esto puede parecer una tontería para una expresión tan pequeña, pero una de las ideas clave en Tensorflow 1.x es ejecución diferida: es muy barato construir una expresión grande y compleja, y cuando quieras evaluarla, el back-end (al que te conectas con un Session
) es capaz de programar su ejecución de manera más eficiente (por ejemplo, ejecutando partes independientes en paralelo y usando GPU).
[A]: Para imprimir el valor de un tensor sin devolverlo a su programa Python, puede usar el tf.print()
operador, como sugiere Andrzej en otra respuesta. Según la documentación oficial:
Para asegurarse de que el operador se ejecuta, los usuarios deben pasar la operación producida a
tf.compat.v1.Session
ejecutar el método, o usar la operación como una dependencia de control para operaciones ejecutadas especificando contf.compat.v1.control_dependencies([print_op]
), que se imprime en salida estándar.
También tenga en cuenta que:
En cuadernos y colabs de Jupyter,
tf.print
imprime en las salidas de la celda del portátil. No escribirá en los registros de la consola del kernel del portátil.
[B]: Usted podría ser capaz de usar el tf.get_static_value()
función para obtener el valor constante del tensor dado si su valor se puede calcular de manera eficiente.
Si bien otras respuestas son correctas en cuanto a que no puede imprimir el valor hasta que evalúe el gráfico, no hablan de una forma sencilla de imprimir un valor dentro del gráfico, una vez que lo evalúa.
La forma más fácil de ver el valor de un tensor cada vez que se evalúa el gráfico (usando run
o eval
) es usar el Print
operación como en este ejemplo:
# Initialize session
import tensorflow as tf
sess = tf.InteractiveSession()
# Some tensor we want to print the value of
a = tf.constant([1.0, 3.0])
# Add print operation
a = tf.Print(a, [a], message="This is a: ")
# Add more elements of the graph using a
b = tf.add(a, a)
Ahora, siempre que evaluemos el gráfico completo, por ejemplo, usando b.eval()
, obtenemos:
I tensorflow/core/kernels/logging_ops.cc:79] This is a: [1 3]
Reiterando lo que otros dijeron, no es posible verificar los valores sin ejecutar el gráfico.
Un fragmento simple para cualquiera que busque un ejemplo sencillo para imprimir valores es el siguiente. El código se puede ejecutar sin ninguna modificación en el cuaderno ipython
import tensorflow as tf
#define a variable to hold normal random values
normal_rv = tf.Variable( tf.truncated_normal([2,3],stddev = 0.1))
#initialize the variable
init_op = tf.initialize_all_variables()
#run the graph
with tf.Session() as sess:
sess.run(init_op) #execute init_op
#print the random values that we sample
print (sess.run(normal_rv))
Producción:
[[-0.16702934 0.07173464 -0.04512421]
[-0.02265321 0.06509651 -0.01419079]]