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

Mar*_*kus 5 tensorflow

如果TensorFlow涉及对同一计算(子)图的多次调用,它是否可以自动缓存计算?

例如,我有一个矩阵F,其中每个条目代表基于可训练变量的计算W.我的目标函数用不同的向量将这个矩阵乘以几次(每次都用不变的W).

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

理论上,人们可以预先计算F给定固定的矩阵W,这样每个条目F都是a tf.constant.但这会妨碍正确计算梯度W.

mrr*_*rry 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)
Run Code Online (Sandbox Code Playgroud)

当您sess.run()使用此配置进行调用时,TensorFlow 将评估要运行的适当节点,然后识别输出恒定的那些节点的子图,评估它们并缓存结果。因此,它将避免重新执行冗余计算。

然而,在你的问题中你提到这F是一些可训练变量的函数。从 TensorFlow 的角度来看,这些变量是易失性的(它们可能随时更改),因此它不会缓存从这些变量派生的值。如果你想F多次重复使用同一个值,你可以考虑将它存储在 a 中tf.constant(),这样常量折叠优化更有用。