Мне нужен поток условного управления в моем графике. Если pred
- True
, граф должен вызывать op, который обновляет переменную и затем возвращает ее, в противном случае она возвращает переменную без изменений. Упрощенная версия:
pred = tf.constant(True)
x = tf.Variable([1])
assign_x_2 = tf.assign(x, [2])
def update_x_2():
with tf.control_dependencies([assign_x_2]):
return tf.identity(x)
y = tf.cond(pred, update_x_2, lambda: tf.identity(x))
with tf.Session() as session:
session.run(tf.initialize_all_variables())
print(y.eval())
Однако я обнаружил, что оба pred=True
и pred=False
приводят к одному результату y=[2]
, что означает, что присваивание op также вызывается, если update_x_2
не выбрано tf.cond
. Как это объяснить? И как решить эту проблему?