在TensorFlow中Session.run()与Tensor.eval()都可以用来执行.
如果你有一个Tensor t,在使用t.eval()时,等价于:tf.get_default_session().run(t).
如下面两段代码是相同的:
1 2 3 4 5 6 7 8 9 |
# Using `Session.run()`. sess = tf.Session() c = tf.constant(5.0) print(sess.run(c)) # Using `Tensor.eval()`. c = tf.constant(5.0) with tf.Session(): print(c.eval()) |
而他们之间也存在这区别:
在第二个示例中,session充当上下文管理器,其作用是作为with块的生命周期的默认会话。 上下文管理器方法可以为简单用例(比如单元测试)提供更简洁的代码; 如果您的代码处理多个graphs和sessions,则可以更直接地对Session.run()进行显式调用。
简而言之:Session.run()常用于获取多个tensor中的值,而Tensor.eval()常用于单元测试、获取单个Tensor值
示例如下
1 2 3 4 5 6 7 8 |
t = tf.constant(42.0) u = tf.constant(37.0) tu = tf.mul(t, u) ut = tf.mul(u, t) with sess.as_default(): tu.eval() # runs one step ut.eval() # runs one step sess.run([tu, ut]) # evaluates both tensors in a single step |
References:
[1]:https://www.tensorflow.org/api_docs/python/tf/Tensor#eval
[2]:https://www.tensorflow.org/api_docs/python/tf/Session#run
[3]:https://stackoverflow.com/questions/33610685/in-tensorflow-what-is-the-difference-between-session-run-and-tensor-eval
[4]:https://www.tensorflow.org/programmers_guide/faq#running_a_tensorflow_computation