TensorFlow是否重用中间计算结果?附代码场景问询
TensorFlow是否重用中间结果?
针对你给出的这段代码:
import tensorflow as tf a = tf.constant([3]) b = tf.constant([4]) c = tf.constant([5]) d = a + b e = d - c f = e*d sess = tf.Session() results = sess.run([d,e,f])
核心结论
在调用sess.run([d,e,f])计算这三个节点时,TensorFlow会重用已经计算出的中间结果d和e,不会重新计算它们。
具体解释
TensorFlow的计算图执行逻辑是这样的:
- 当你一次性请求多个节点(这里是d、e、f)的结果时,TensorFlow会先遍历整个计算图,找出所有依赖的节点,然后规划出最优的执行路径。
- 首先计算
d = a + b,得到d的值后,会把这个结果暂存下来; - 接着用d的结果计算
e = d - c,同样暂存e的值; - 最后计算
f = e*d时,直接使用之前已经计算好的e和d的缓存值,不需要再重新计算a+b或者d-c。
这种自动重用中间结果的机制是TensorFlow优化计算效率的一个重要方式,避免了冗余计算。
补充说明
如果是分开多次调用sess.run,比如先执行sess.run(d),再执行sess.run(f),那么第二次计算f的时候,会重新计算d和e(因为会话默认不会持久化中间节点的结果,除非你使用了tf.Variable或者显式的缓存机制)。但在同一个sess.run调用中请求多个相关节点时,就会自动共享中间结果。
内容的提问来源于stack exchange,提问作者Bui Thanh Binh
相关产品推荐
相关产品推荐

