while_loop 具有 ValueError Shape 的等级必须为 0,但 'while/LoopCond' 的等级为 2

while_loop with ValueError Shape must be rank 0 but is rank 2 for 'while/LoopCond'

x=([1.,2.],
   [2.,1.])
xtensor = tf.convert_to_tensor(x)
A = xtensor
B = xtensor
def cond(now,pre):
   return (tf.greater(now,pre))
def body(now,pre):
   return pre,now
A,now = tf.while_loop(cond,body,[A,B])
with tf.Session() as sess:
   sess.run(tf.global_variables_initializer())
   A = sess.run(A)
   B = sess.run(B)
   now = sess.run(now)

其实代码的目的可以忽略,因为我简化了问这个问题的两个函数,还是一样的错误:

ValueError:Shape must be rank 0 but is rank 2 for 'while/LoopCond'(op:'LoopCond') with input shapes:[2,2].

我真的很困惑.....希望有人能帮助me.Thanks很多!

tf.while_loop() 的条件函数 (cond) 必须 return 阶为 0 的布尔张量(即形状 [],即单个布尔值)。您的 cond 是 return 阶数为 2 的布尔张量(因为 tf.greater(now, pre) return 是与 now 形状相同的张量,执行每个元素的比较)。