TensorFlow是否使用sess.run()执行整个计算图?

时间:2016-12-31 09:53:03

标签: python machine-learning tensorflow

例如,当我们将变量c计算为result = sess.run(c)时,TF是否仅计算计算c所需的输入或更新完整计算图的所有变量?

另外,我似乎无法做到这一点: c = c*a*b 因为即使将uninitialized variable初始化为c,我仍然遇到tf.Variable(tf.constant(1))错误。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

由于TF的Python代码仅设置图形,该图形实际上是由所有ops的本机实现执行的,因此需要在此底层环境中执行变量。这通过执行两个操作来实现 - 用于本地和全局变量初始化:

session.run(tf.global_variables_initializer(), tf.local_variables_initializer())

关于原始问题 - 据我所知 - 是的,它会计算所有图表,并且它要求您提供占位符,即使执行的操作(在会话中)不依赖于它们。

答案 1 :(得分:0)

这个问题相当老,但是我会回答,以防万一有人再次遇到这个问题。

要回答第一个问题,不。 Tensorflow仅执行执行传递给它的操作所需的内容。来自tensorflow.org:

  

tf.Session.run要求您指定获取的列表,这些获取确定返回值,并且可以是tf.Operation,tf.Tensor或类似张量的类型,例如tf.Variable。这些提取操作决定了整个tf的哪个子图。必须执行Graph才能产生结果

要回答问题的第二部分,必须先初始化变量,然后才能使用它们(请参见下面的链接)。最简单的方法是运行tensorflow.global_variables_initializer()

https://www.tensorflow.org/guide/variables#initializing_variables