Confundido por el comportamiento de `tf.cond`

Necesito un flujo de control condicional en mi gráfico. Sipred esTrue, el gráfico debe llamar a una operación que actualiza una variable y luego la devuelve; de lo contrario, devuelve la variable sin cambios. Una versión simplificada es:

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())

Sin embargo, encuentro que ambospred=True ypred=False conducir al mismo resultadoy=[2], lo que significa que la operación de asignación también se llama cuandoupdate_x_2 no es seleccionado portf.cond. ¿Cómo explicar esto? ¿Y cómo resolver este problema?

Respuestas a la pregunta(2)

Su respuesta a la pregunta