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

Posted

技术标签:

【中文标题】Tensorflow 中 sess.run(c) 和 c.eval() 的区别【英文标题】:The difference between sess.run(c) and c.eval() in Tensorflow 【发布时间】:2018-11-07 16:58:43 【问题描述】:

在以下示例中打印出节点“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()

【问题讨论】:

In TensorFlow, what is the difference between Session.run() and Tensor.eval()?的可能重复 【参考方案1】:

当你在张量上调用 c.eval() 时,you are basically calling tf.get_default_session().run(c)。这是一个方便的快捷方式。

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

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

【讨论】:

最重要的是sess.run 可以处理与.eval() 相比导致some trouble 的列表

以上是关于Tensorflow 中 sess.run(c) 和 c.eval() 的区别的主要内容,如果未能解决你的问题,请参考以下文章

tensorflow sess.run() 真的可以释放python的GIL(全局解释器外观)吗?

“你好,TensorFlow!”使用 C API

tensorflow常见问题

Tensorflow

TensorFlow入门——hello

Tensorflow入门