Confuso com o comportamento do `tf.cond`
Eu preciso de um fluxo de controle condicional no meu gráfico. E sepred
éTrue
, o gráfico deve chamar um op que atualize uma variável e a retorne, caso contrário, ele retornará a variável inalterada. Uma versão simplificada é:
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())
No entanto, acho que ambospred=True
epred=False
levar ao mesmo resultadoy=[2]
, o que significa que a operação de atribuição também é chamada quandoupdate_x_2
não é selecionado portf.cond
. Como explicar isso? E como resolver esse problema?