Tensorflow中sess.run(c)和c.eval()之间的区别

时间:2018-05-29 06:20:57

标签: python tensorflow

在以下示例中打印出节点“c”的值时,对我来说,似乎print sess.run(c)print c.eval()之间没有区别。我可以假设sess.run(c)c.eval()是等价的吗?或者有什么不同吗?

import tensorflow as tf

a = tf.Variable(2.0, name="a")
b = tf.Variable(3.0, name="b")
c = tf.add(a, b, name="add")
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print sess.run(c)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    print c.eval()

1 个答案:

答案 0 :(得分:2)

在张量号you are basically calling tf.get_default_session().run(c)上呼叫c.eval()时。这是一个方便的捷径。

但是,Session.run()更为通用。

  1. 它允许您一次查询多个输出:sess.run([a, b, ...])。当这些输出相关并且取决于可能改变的状态时,重要的是同时使它们具有一致的结果。人们经常对此[1][2]感到惊讶。
  2. Session.run()可以使用Tensor.eval()没有的一些参数,例如RunOptions,这些参数可用于调试或分析。
    • 但请注意,eval() 可以feed_dict
  3. eval()Tensor s的属性。但另一方面,Operationglobal_variables_initializer()没有eval()而是run()(另一种方便的快捷方式)。 Session.run()可以同时运行。