我在这里读到了这个问题 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?,但我不能断定是否有可能基于最后的答案(现在的实验支持?)
谢谢!
答案 0 :(得分:1)
@dga是正确的。如果将tf.Variable
对象传递给tf.Session.run()
,TensorFlow将返回变量的当前值,并且不会执行任何计算。它很便宜(内存复制的成本,或者在分布式TensorFlow设置的情况下可能是网络传输)。 TensorFlow不保留关于tf.Variable
的值如何更新的任何历史记录*,因此通常无法从头开始重新计算其值。
(*技术上TensorFlow会记住用于初始化每个变量的tf.Tensor
,因此可以重新计算变量的初始值。)