首页 > 解决方案 > Why use constant i in `tf.while_loop` as `loop_vars`?

问题描述

The while_loop is like this:

i = tf.constant(0)
c = lambda i: tf.less(i, 10)
b = lambda i: tf.add(i, 1)
r = tf.while_loop(c, b, [i])

i is used as a incremental variable. So, i is changeable.
Why we define i as a constant?
Why not i = tf.Variable(0, tf.int32)

标签: pythontensorflow

解决方案


i用作增量变量。所以,i是多变的。

不完全正确——如果是这样,i不可能是一个常数。

tf.add(i, 1)不会改变i,它需要张量i并通过添加 1 来创建一个新的张量。(在实践中,tensorflow 可能会为生成的张量重用相同的内存分配,但这是与逻辑无关的优化tf.where)。

您可能会感到困惑,因为i在 lambdas 中使用了相同的名称,但所有这些张量都是不同的张量,对应于每次迭代的操作输出。

因此,i您声明的实际是迭代的第一个值(循环中的所有其他值也是如此,不仅适用于您的计数器)。它确实是一个常数 0,因此这样声明它是有意义的。将您的初始值 0 声明为Variable.


推荐阅读