什么时候可以安全缓存张量?

2024-05-16 10:52:44 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有一些方法foo,我们在图形构造期间调用它,每次调用它时都返回一些tf.Tensors或它们的嵌套结构,还有许多其他方法利用foo的结果。为了提高效率并避免使用不必要的重复操作对TF图进行垃圾处理,在第一次调用时,可能会让foo缓存它的结果(以重用它生成的子图)。但是,如果在控制流的上下文中使用foo,如tf.condtf.map_fntf.while_loop,则该操作将失败。你知道吗

我的问题是:

  1. 什么时候可以安全地缓存tf.Tensor对象而不引起控制流的问题?也许有什么方法可以检索创建tf.Tensor的控制流(如果有的话),存储它并稍后进行比较,以查看是否可以重用缓存的结果?

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

(更新了问题文本,以便更清楚地说明foo每次调用时都会创建一组新的张量)


Tags: 方法图形利用mapfootf结构fn
1条回答
网友
1楼 · 发布于 2024-05-16 10:52:44

TL;DR:TF已经缓存了它需要的东西,你自己不用麻烦了。你知道吗

每次调用sess.run([some_tensors])TF的引擎时,找到计算[some_tensors]中所有张量所需的最小子图,然后从上到下运行它(可能是在新数据上,如果您没有输入相同的数据)。你知道吗

这意味着,在sess.run调用之间缓存结果对于节省计算是无用的,因为它们无论如何都会被重新计算。你知道吗

如果您关心的是在一次调用sess.run中使用与输入数据相同的多个张量,请不要担心,TF已经足够聪明了。如果您有输入AB = 2*AC = A + 1,只要您做了^{sess.run调用,作为sess.run([B,C])A的调用将只被计算一次(然后由TF引擎隐式缓存)。你知道吗

相关问题 更多 >