eval () y run () en tensorflow

Me refiero al tutorial profundo de MNIST for Experts dado por tensorflow. Tengo un problema en Formar y evaluar parte de ese tutorial. Allí han dado un código de ejemplo de la siguiente manera.

cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv),reduction_indices=[1])) train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy) correct_prediction = tf.equal(tf.argmax(y_conv,1), tf.argmax(y_,1)) accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32)) sess.run(tf.initialize_all_variables()) for i in range(20000): batch = mnist.train.next_batch(50) if i%100 == 0: train_accuracy = accuracy.eval(feed_dict={x:batch[0], y_: batch[1], keep_prob: 1.0}) print("step %d, training accuracy %g"%(i, train_accuracy)) train_step.run(feed_dict={x: batch[0], y_: batch[1], keep_prob: 0.5}) print("test accuracy %g"%accuracy.eval(feed_dict={x: mnist.test.images, y_: mnist.test.labels, keep_prob: 1.0})) 

Por lo tanto, en este segmento de código, han utilizado accuracy.eval() al mismo tiempo. Y otra vez train_step.run() . Como sé de ambos son variables tensoriales.

Y en algunos casos, he visto como

 sess.run(variable, feed_dict) 

Así que mi pregunta es ¿cuáles son las diferencias entre estas 3 implementaciones? ¿Y cómo puedo saber qué usar cuando ..?

¡¡Gracias!!

Si solo tiene una sesión predeterminada, son básicamente las mismas.

Desde https://github.com/tensorflow/tensorflow/blob/v1.12.0/tensorflow/python/framework/ops.py#L2351 :

op.run () es un acceso directo para llamar a tf.get_default_session (). run (op)

Desde https://github.com/tensorflow/tensorflow/blob/v1.12.0/tensorflow/python/framework/ops.py#L691 :

t.eval () es un acceso directo para llamar a tf.get_default_session (). run (t)

Diferencia entre Tensor y Operación:

Tensor: https://www.tensorflow.org/api_docs/python/tf/Tensor

Operación: https://www.tensorflow.org/api_docs/python/tf/Operation

Nota: la clase Tensor será reemplazada por Salida en el futuro. Actualmente estos dos son alias el uno para el otro.

La diferencia está en Operaciones vs. Tensores. Las operaciones usan run () y los tensores usan eval ().

Parece que hay una referencia a esta pregunta en TensorFlow Preguntas frecuentes: https://www.tensorflow.org/programmers_guide/faq#running_a_tensorflow_computation

La sección trata la siguiente pregunta: ¿Cuál es la diferencia entre Session.run () y Tensor.eval ()?