如何在热切执行中使用tf.while_loop?

时间:2019-04-07 15:33:15

标签: python tensorflow tensorflow2.0 eager-execution

在文档中,tf.while_loop的主体必须是可调用的python。

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

有效但是

def b(i):
    tf.add(i,1)

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

引发ValueError:尝试将不受支持的type()的值(无)转换为张量

在2.0中,急切执行是默认的,我想知道是什么问题?!

1 个答案:

答案 0 :(得分:1)

您忘记在函数中添加return语句:

import tensorflow as tf

def b(i):
    return tf.add(i, 1)

i = tf.constant(0)
c = lambda i: tf.less(i, 10)
tf.while_loop(c, b, [i]) # <tf.Tensor: id=51, shape=(), dtype=int32, numpy=10>

请注意,在您的第一个示例函数b中确实会返回递增的值:

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