В документации тело 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: попытка преобразовать значение (None) с неподдерживаемым типом() в Tensor
В 2.0 жадное выполнение по умолчанию, интересно, в чем проблема?!
Вы забыли добавить оператор возврата в свою функцию:
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
Я думаю, что ваша
b
функция должнаreturn
что-то.