如果计算涉及到对同一计算(子)图的多次调用,TensorFlow是否可以自动缓存计算?
例如,我有一个矩阵F,其中每个条目表示基于可训练变量W的计算。我的目标函数将这个矩阵与不同的向量相乘几次(每次都使用不变的W)。
例如,当我访问TensorFlow时,它是否会重新计算F[1,2],或者它是否会缓存该值?
理论上,可以预先计算给定固定W的矩阵F,这样F中的每个条目都是一个tf.constant。但这会阻碍W梯度的正确计算。
发布于 2016-03-10 12:43:43
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()中,以便常量折叠优化更有用。
https://stackoverflow.com/questions/35905830
复制相似问题