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_dict
。
eval()
是 Tensor
s 的属性。但是另一方面,Operation
s,例如global_variables_initializer()
,没有eval()
,而是run()
(另一个方便的快捷方式)。 Session.run()
可以同时运行。
【讨论】:
最重要的是sess.run
可以处理与.eval()
相比导致some trouble 的列表以上是关于Tensorflow 中 sess.run(c) 和 c.eval() 的区别的主要内容,如果未能解决你的问题,请参考以下文章