TensorFlow使用什么缓存模型?

时间:2016-09-07 23:14:37

标签: tensorflow

我在这里读到了这个问题 TensorFlow - get current value of a Variable 答案让我感到困惑。

一方面,dga说“并且非常清楚:运行变量会 只产生变量的当前值;它不会运行任何 分配与之相关的操作。它很便宜。“

另一方面,萨尔瓦多·达利说“@dga是的,如果变量取决于 在其他变量上,它们也需要进行评估。“

那么,这是什么?评估变量只会返回其当前值 值,还是从变量中重新计算其值 取决于?

如果我连续两次评估相同的变量会怎样?是否 Tensorflow有任何“陈旧”变量的概念,即变量 需要重新计算,因为他们的依赖关系实际上已经改变了(例如,在 构建系统)?

我问,因为我使用多个网络,其中一个部分输出 net成为另一个网络的部分输入。我想要获取 在一个网络的输入层计算的渐变和合并+应用它们 另一个网络的输出层。我希望通过手动完成此操作 检索/存储图形变量中的渐变,然后 运行图形操作以反向传播渐变。因此我需要 了解它是如何在幕后工作的。

我所做的与此类似 How to use Tensorflow Optimizer without recomputing activations in reinforcement learning program that returns control after each iteration?,但我不能断定是否有可能基于最后的答案(现在的实验支持?)

谢谢!

1 个答案:

答案 0 :(得分:1)

@dga是正确的。如果将tf.Variable对象传递给tf.Session.run(),TensorFlow将返回变量的当前值,并且不会执行任何计算。它很便宜(内存复制的成本,或者在分布式TensorFlow设置的情况下可能是网络传输)。 TensorFlow不保留关于tf.Variable的值如何更新的任何历史记录*,因此通常无法从头开始重新计算其值。

(*技术上TensorFlow会记住用于初始化每个变量的tf.Tensor,因此可以重新计算变量的初始值。)