Как использовать tf. while_loop с нетерпеливым исполнением? - PullRequest
2 голосов
/ 07 апреля 2019

В документации тело tf. while_loop должно быть вызвано питоном.

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: Попытка преобразовать значение (Нет) с неподдерживаемым типом () в Tensor

В 2.0 нетерпеливое выполнение по умолчанию, интересно, в чем проблема?!

1 Ответ

1 голос
/ 07 апреля 2019

Вы забыли добавить оператор возврата в вашу функцию:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...