TensorFlow tiene dos formas de evaluar parte del gráfico: Session.run
en una lista de variables y Tensor.eval
. ¿Hay alguna diferencia entre estos dos?
python
tensorflow
Geoffrey Irving
fuente
fuente
tf.Tensor.eval()
ytf.Session.run()
, pero están conectadostf.Operation.run()
ytf.Tensor.eval()
como se explica aquíRespuestas:
Si tiene una
Tensor
t, llamart.eval()
es equivalente a llamartf.get_default_session().run(t)
.Puede hacer que una sesión sea la predeterminada de la siguiente manera:
La diferencia más importante es que puede usar
sess.run()
para obtener los valores de muchos tensores en el mismo paso:Tenga en cuenta que cada llamada a
eval
yrun
ejecutará todo el gráfico desde cero. Para almacenar en caché el resultado de un cálculo, asígnelo a atf.Variable
.fuente
a = tf.constant(2.0) b = tf.constant(3.0) ab = tf.matmul(a, b)
y recibí quejas de Tensorflow de que las formas no coinciden, supongo que más precisamente, que el rango debe ser al menos 2.tf.multiply(t, u)
y funcionó bien.La sesión de preguntas frecuentes sobre el flujo del tensor tiene una respuesta exactamente a la misma pregunta . Seguiré adelante y lo dejaré aquí:
Si
t
es unTensor
objeto, es unat.eval()
forma abreviada desess.run(t)
(dondesess
está la sesión predeterminada actual. Los dos fragmentos de código siguientes son equivalentes:En el segundo ejemplo, la sesión actúa como administrador de contexto, lo que tiene el efecto de instalarla como la sesión predeterminada durante la vida útil del
with
bloque. El enfoque del administrador de contexto puede conducir a un código más conciso para casos de uso simples (como pruebas unitarias); Si su código trata con múltiples gráficos y sesiones, puede ser más sencillo hacer llamadas explícitasSession.run()
.Le recomiendo que al menos lea las preguntas frecuentes completas, ya que podría aclarar muchas cosas.
fuente
eval()
no puede manejar el objeto de la listapero
Session.run()
puedecorrígeme si estoy equivocado
fuente
Lo más importante para recordar:
Sabiendo esto, todo lo demás es fácil :
También describiría el método
tf.Operation.run()
como aquí :fuente
En tensorflow, crea gráficos y pasa valores a ese gráfico. Graph hace todo el trabajo duro y genera la salida en función de la configuración que ha realizado en el gráfico. Ahora, cuando pasa valores al gráfico, primero debe crear una sesión de tensorflow.
Una vez que se inicializa la sesión, se supone que debe usar esa sesión porque todas las variables y configuraciones ahora son parte de la sesión. Por lo tanto, hay dos formas de pasar valores externos al gráfico para que el gráfico los acepte. Una es llamar a .run () mientras usa la sesión que se está ejecutando.
Otra forma que es básicamente un acceso directo a esto es usar .eval (). Dije acceso directo porque la forma completa de .eval () es
Puedes comprobarlo tú mismo. En el lugar de la
values.eval()
carreratf.get_default_session().run(values)
. Debes tener el mismo comportamiento.lo que eval está haciendo es usar la sesión predeterminada y luego ejecutar run ().
fuente
Respuesta compatible con Tensorflow 2.x : Convertir el código de mrry
Tensorflow 2.x (>= 2.0)
en beneficio de la comunidad.fuente