La forma más fácil [A] de evaluar el valor real de un Tensor
objeto es pasarlo al Session.run()
método, o llamar Tensor.eval()
cuando tenga una sesión predeterminada (es decir, en un with tf.Session():
bloque, 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 manera fácil de evaluar los tensores, le tf.InteractiveSession
permite abrir una sesión al comienzo de su programa y luego usar esa sesión para todas Tensor.eval()
(y Operation.run()
) llamadas. Esto puede ser más fácil en una configuración interactiva, como el shell o una computadora portátil IPython, cuando es tedioso pasar un Session
objeto a todas partes. Por ejemplo, lo siguiente funciona en un cuaderno 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 la ejecución diferida : es muy barato construir una expresión grande y compleja, y cuando desea evaluarla, el back-end (para con el que se conecta a Session
) puede programar su ejecución de manera más eficiente (por ejemplo, ejecutar partes independientes en paralelo y usar 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 el op producido al tf.compat.v1.Session
método de ejecución o usar el op como una dependencia de control para los ops ejecutados especificando con tf.compat.v1.control_dependencies([print_op]
), que se imprime en la salida estándar.
También tenga en cuenta que:
En los cuadernos y colabs Jupyter, tf.print
imprime en las salidas de celda del cuaderno. No escribirá en los registros de la consola del kernel del notebook.
[B]: es posible que pueda usar la tf.get_static_value()
función para obtener el valor constante del tensor dado si su valor es eficientemente calculable.
tf.Session()
no funciona en Tensorflow 2. Puede usarlotf.compat.v1.Session()
en su lugar.Si bien otras respuestas son correctas de que no puede imprimir el valor hasta que evalúe el gráfico, no hablan de una manera fácil de imprimir realmente 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
oeval
) es usar laPrint
operación como en este ejemplo:Ahora, cada vez que evaluamos todo el gráfico, por ejemplo
b.eval()
, usando , obtenemos:fuente
a.eval()
entonces!tf.Print()
ha quedado en desuso y (ahora) eliminado. En lugar de usartf.print()
. Ver documentos: tensorflow.org/api_docs/python/tf/Print y tensorflow.org/api_docs/python/tf/print .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 de ipython
Salida:
fuente
WARNING:tensorflow:From <ipython-input-25-8583e1c5b3d6>:1: initialize_all_variables (from tensorflow.python.ops.variables) is deprecated and will be removed after 2017-03-02. Instructions for updating: Use 'tf.global_variables_initializer' instead.
No, no puede ver el contenido del tensor sin ejecutar el gráfico (haciendo
session.run()
). Las únicas cosas que puedes ver son:transpose_1:0
,random_uniform:0
)float32
)No he encontrado esto en la documentación, pero creo que los valores de las variables (y algunas de las constantes no se calculan en el momento de la asignación).
Echale un vistazo a éste ejemplo:
El primer ejemplo donde acabo de iniciar un Tensor constante de números aleatorios se ejecuta aproximadamente al mismo tiempo, independientemente de dim (
0:00:00.003261
)En el segundo caso, donde la constante se evalúa y se asignan los valores, el tiempo depende claramente de dim (
0:00:01.244642
)Y puede hacerlo más claro calculando algo (
d = tf.matrix_determinant(m1)
teniendo en cuenta que el tiempo se acabaráO(dim^2.8)
)PD que encontré donde se explica en la documentación :
fuente
Creo que necesitas tener algunos fundamentos correctos. Con los ejemplos anteriores, ha creado tensores (matriz multidimensional). Pero para que el flujo de tensor realmente funcione, debe iniciar una " sesión " y ejecutar su " operación " en la sesión. Observe la palabra "sesión" y "operación". Necesita saber 4 cosas para trabajar con tensorflow:
Ahora, por lo que escribió, le ha dado el tensor y la operación, pero no tiene sesión en ejecución ni un gráfico. El tensor (bordes del gráfico) fluye a través de los gráficos y son manipulados por operaciones (nodos del gráfico). Hay un gráfico predeterminado pero puede iniciar el suyo en una sesión.
Cuando dice imprimir, solo accede a la forma de la variable o constante que definió.
Para que puedas ver lo que te estás perdiendo:
¡Espero eso ayude!
fuente
En
Tensorflow 1.x
Con Tensorflow 2.x, el modo ansioso está habilitado de forma predeterminada. entonces el siguiente código funciona con TF2.0.
fuente
Según las respuestas anteriores, con su fragmento de código particular puede imprimir el producto de esta manera:
fuente
En Tensorflow 2.0+ (o en el entorno del modo Eager) puede llamar al
.numpy()
método:fuente
tf.print(product)
también me da la misma salida queprint(product.numpy())
con TF 2.0.tf.keras.backend.eval
Es útil para evaluar expresiones pequeñas.TF 1.xy TF 2.0 compatibles.
Ejemplo mínimo verificable
Esto es útil porque no tiene que crear explícitamente un
Session
oInteractiveSession
.fuente
Puede verificar la salida de un TensorObject sin ejecutar el gráfico en una sesión, habilitando la ejecución ansiosa .
Simplemente agregue las siguientes dos líneas de código:
import tensorflow.contrib.eager as tfe tfe.enable_eager_execution()
justo después de ti
import tensorflow
.La salida de
print product
en su ejemplo ahora será:tf.Tensor([[ 12.]], shape=(1, 1), dtype=float32)
Tenga en cuenta que a partir de ahora (noviembre de 2017) tendrá que instalar una compilación nocturna Tensorflow para permitir una ejecución ansiosa. Las ruedas prefabricadas se pueden encontrar aquí .
fuente
Tenga en cuenta que
tf.Print()
cambiará el nombre del tensor. Si el tensor que desea imprimir es un marcador de posición, la alimentación de datos fallará ya que no se encontrará el nombre original durante la alimentación. Por ejemplo:Salida es:
fuente
Debería pensar en los programas de TensorFlow Core como dos secciones discretas:
Entonces, para el siguiente código, solo construye el gráfico computacional.
También debe inicializar todas las variables en un programa TensorFlow, debe llamar explícitamente a una operación especial de la siguiente manera:
Ahora construye el gráfico e inicializa todas las variables, el siguiente paso es evaluar los nodos, debe ejecutar el gráfico computacional dentro de una sesión. Una sesión encapsula el control y el estado del tiempo de ejecución de TensorFlow.
El siguiente código crea un objeto Session y luego invoca su método de ejecución para ejecutar suficiente gráfica computacional para evaluar
product
:fuente
Puede usar Keras, la respuesta de una línea será usar un
eval
método como este:fuente
¡Prueba este código simple! (se explica por sí mismo)
fuente
No me resultó fácil entender lo que se requiere incluso después de leer todas las respuestas hasta que ejecuté esto. TensofFlow también es nuevo para mí.
Pero aún puede necesitar el valor devuelto al ejecutar la sesión.
fuente
Básicamente, en tensorflow cuando crea un tensor de cualquier tipo, se crean y almacenan dentro, a los que solo se puede acceder cuando ejecuta una sesión de tensorflow. Digamos que usted ha creado un tensor constante
c = tf.constant([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
Sin ejecutar una sesión, usted puede conseguir
-
op
: una operación. Operación que calcula este tensor.-
value_index
: Un int. Índice del punto final de la operación que produce este tensor.-
dtype
: Un DType. Tipo de elementos almacenados en este tensor.Para obtener los valores, puede ejecutar una sesión con el tensor que necesita como:
La salida será algo como esto:
fuente
Habilite la ejecución ansiosa que se introduce en tensorflow después de la versión 1.10. Es muy fácil de usar.
fuente
Utilizando los consejos proporcionados en https://www.tensorflow.org/api_docs/python/tf/print , uso la
log_d
función para imprimir cadenas formateadas.fuente
fuente
tf.Print ahora está en desuso, aquí se explica cómo usar tf.print (p minúscula).
Si bien ejecutar una sesión es una buena opción, no siempre es el camino a seguir. Por ejemplo, es posible que desee imprimir algún tensor en una sesión particular.
El nuevo método de impresión devuelve una operación de impresión que no tiene tensores de salida:
Como no tiene salidas, no puede insertarlo en un gráfico de la misma manera que lo haría con tf.Print. En cambio, puede agregarlo para controlar las dependencias en su sesión para que se imprima.
A veces, en un gráfico más grande, tal vez creado en parte en subfunciones, es engorroso propagar print_op a la llamada de sesión. Luego, tf.tuple se puede usar para acoplar la operación de impresión con otra operación, que luego se ejecutará con esa operación, cualquiera que sea la sesión que ejecute el código. Así es como se hace:
fuente
Pregunta: ¿Cómo imprimir el valor de un objeto Tensor en TensorFlow?
Responder:
fuente