什么时候缓存tf.Tensors是安全的?

时间:2018-03-29 07:51:54

标签: python tensorflow

假设我们在图形构建时调用了一些方法foo,每次调用时返回一些tf.Tensors或它们的嵌套结构,以及使用{{1}的多个其他方法结果。为了提高效率并避免使用不必要的重复操作向TF图表发送垃圾邮件,可能很有可能在第一次调用时foo缓存其结果(以重用它生成的子图)。但是,如果在控制流的上下文中使用foo,则会失败,例如footf.condtf.map_fn

我的问题是:

  1. 何时以不会导致控制流问题的方式缓存tf.while_loop对象是否安全?也许有一些方法可以检索创建tf.Tensor的控制流(如果有的话),存储它并稍后比较它以查看是否可以重用缓存的结果?

  2. 上述问题的答案如何适用于tf.Tensor

  3. (问题文本已更新,以便更清楚tf.Operations每次都会创建一组新的张量)

1 个答案:

答案 0 :(得分:0)

TL; DR :TF已经缓存了所需的内容,请不要自己烦恼。

每次拨打sess.run([some_tensors]) TF的引擎时,都会找到计算[some_tensors]中所有张量所需的最小子图,从上到下依次运行(可能是新数据,如果你没有给它提供相同的数据)。

这意味着,在sess.run次调用之间缓存结果对于保存计算毫无用处,因为它们无论如何都会被重新计算。

如果,您反而需要使用与sess.run的一个电话中的输入相同的数据来使用多个张量,并且#39不用担心,TF很聪明。如果您输入AB = 2*AC = A + 1,只要您进行一次 sess.run来电sess.run([B,C]) {{1}将仅评估一次(然后由TF引擎隐式缓存)。