Tensorflow 为什么tf.cond中的false_fn从未打过电话?

Tensorflow 为什么tf.cond中的false_fn从未打过电话?,tensorflow,Tensorflow,它非常适合使用tf.while\u loop和tf.cond一起使用。为什么虚假条件从未满足 i0 = tf.constant(1) m0 = tf.zeros([1, 2], dtype=tf.int32) first_set = tf.Variable(True, dtype=tf.bool) def cond_true_fn(i, m): global first_set first_set = tf.assign(first_set, False) return

它非常适合使用
tf.while\u loop
tf.cond
一起使用。为什么虚假条件从未满足

i0 = tf.constant(1)
m0 = tf.zeros([1, 2], dtype=tf.int32)
first_set = tf.Variable(True, dtype=tf.bool)

def cond_true_fn(i, m):
    global first_set
    first_set = tf.assign(first_set, False)
    return [i + 1, tf.concat([m, [[6, 6]]], axis=0)]


def cond_false_fn(i, m):
    return [i + 1, tf.concat([m, [[3, 3]]], axis=0)]


def body(i, m):
    return tf.cond(first_set, lambda:cond_true_fn(i,m), lambda:cond_false_fn(i,m))

def condi(i, m):
    return tf.less_equal(i, 3)

_, r = tf.while_loop(condi, body, loop_vars=[i0, m0], shape_invariants=[i0.get_shape(), tf.TensorShape([None, 2])], back_prop=False)

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    _r = sess.run([r])
    print(_r)
它总是处于真实状态。请给出以下意外结果:
[[0,0],[6,6],[6,6],[6,6]]

i0 = tf.constant(1)
m0 = tf.zeros([1, 2], dtype=tf.int32)
f0 = tf.constant(True)
def cond_true_fn(i, m):
    return [i + 1, tf.concat([m, [[6, 6]]], axis=0), False]


def cond_false_fn(i, m):
    return [i + 1, tf.concat([m, [[3, 3]]], axis=0), False]


def body(i, m, f):
    return tf.cond(f, lambda:cond_true_fn(i,m), lambda:cond_false_fn(i,m))

def condi(i, m, f):
    return tf.less_equal(i, 3)

_, r = tf.while_loop(condi, body, loop_vars=[i0, m0, f0], shape_invariants=[i0.get_shape(), tf.TensorShape([None, 2]), f0.get_shape()], back_prop=False)

with tf.Session() as sess:
    tf.global_variables_initializer().run()
    _r = sess.run([r])
    print(_r)

这很有效!但是为什么呢?

我找到了一个解决方案,使用另一个
循环变量
来跟踪
第一个集的状态。它起作用了!但为什么会产生不同的结果呢?