如果TensorFlow涉及对同一计算(子)图的多次调用,它是否可以自动缓存计算?
例如,我有一个矩阵F,其中每个条目代表基于可训练变量的计算W.我的目标函数用不同的向量将这个矩阵乘以几次(每次都用不变的W).
例如,TensorFlow会F[1,2]在我访问它时重新计算,还是会缓存该值?
理论上,人们可以预先计算F给定固定的矩阵W,这样每个条目F都是a tf.constant.但这会妨碍正确计算梯度W.
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(),这样常量折叠优化更有用。
| 归档时间: |
|
| 查看次数: |
1154 次 |
| 最近记录: |