TensorFlow可以自动缓存计算,如果它们涉及的话 多次调用相同的计算(子)图?
例如,我有一个矩阵F
,其中每个条目代表一个
基于可训练变量W
的计算。我的目标功能
用不同的向量将这个矩阵乘以几次(每个
时间没有变化W)。
每当我访问时,TensorFlow会重新计算,例如F[1,2]
它,还是会缓存那个值?
从理论上讲,给定一个固定的F
,可以预先计算矩阵W
,
这样F
中的每个条目都是tf.constant
。但那样会
阻止正确计算W
。
答案 0 :(得分:2)
TensorFlow执行有限数量的缓存,但它可能并不涵盖您所描述的情况。
如果您使用以下选项创建tf.Session
,则会启用常量折叠:
config = tf.ConfigProto(graph_options=tf.GraphOptions(
optimizer_options=tf.OptimizerOptions(opt_level=tf.OptimizerOptions.L2)))
sess = tf.Session(config=config)
当您使用此配置调用sess.run()
时,TensorFlow将评估要运行的相应节点,然后识别其输出为常量的节点的子图,评估它们并缓存结果。因此,它将避免重新执行冗余计算。
但是,在你的问题中,你提到F
是一些可训练变量的函数。从TensorFlow的角度来看,这些变量是易变的 - 它们可能随时发生变化 - 因此它不会缓存从这些变量派生的值。如果您想多次重复使用F
的相同值,可以考虑将其存储在tf.constant()
中,以便常量折叠优化更有用。