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?