Verwirrt durch das Verhalten von `tf.cond`

Ich benötige einen bedingten Kontrollfluss in meinem Diagramm. Wennpred istTrue, das Diagramm sollte eine Operation aufrufen, die eine Variable aktualisiert und dann zurückgibt, andernfalls wird die Variable unverändert zurückgegeben. Eine vereinfachte Version ist:

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

Allerdings finde ich, dass beidepred=True undpred=False zum selben Ergebnis führeny=[2], was bedeutet, dass der Assign-Op auch aufgerufen wird, wennupdate_x_2 ist nicht ausgewählt vontf.cond. Wie ist das zu erklären? Und wie löst man dieses Problem?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage