TensorFlow可以缓存(子)图计算吗?

时间:2016-03-10 01:14:20

标签: tensorflow

TensorFlow可以自动缓存计算,如果它们涉及的话 多次调用相同的计算(子)图?

例如,我有一个矩阵F,其中每个条目代表一个 基于可训练变量W的计算。我的目标功能 用不同的向量将这个矩阵乘以几次(每个 时间没有变化W)。

每当我访问时,TensorFlow会重新计算,例如F[1,2] 它,还是会缓存那个值?

从理论上讲,给定一个固定的F,可以预先计算矩阵W, 这样F中的每个条目都是tf.constant。但那样会 阻止正确计算W

的渐变

1 个答案:

答案 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()中,以便常量折叠优化更有用。