Les opérations ne s'exécutent pas nécessairement dans l'ordre.
Voici un test qui le prouve :
import tensorflow as tf
sess = tf.InteractiveSession()
a = tf.Variable(1.0)
b = tf.Variable(10.0)
c = tf.Variable(0.0)
grp = tf.group(tf.assign(c, a), tf.assign(c, b)) # this is the group op
for i in range(100):
sess.run(tf.global_variables_initializer()) # initialize c each time
sess.run(grp) # run the group op
print(sess.run(c)) # observe results
Quand je l'exécute sur un cpu, j'obtiens que certaines itérations produisent 1.0
et quelques 10.0
.
tf.group
n'exige pas que les opérations soient sur le même appareil, ce qui signifie qu'on ne peut pas s'attendre à ce qu'elles suivent un ordre.
Si vous voulez que les opérations s'exécutent dans l'ordre, assurez-vous de les construire avec control_dependencies
import tensorflow as tf
sess = tf.InteractiveSession()
a = tf.Variable(1.0)
b = tf.Variable(10.0)
c = tf.Variable(0.0)
op1 = tf.assign(c, a)
with tf.get_default_graph().control_dependencies([op1]):
op2 = tf.assign(c, b) # op2 will execute only after op1
grp = tf.group(op1,op2)
for i in range(100):
sess.run(tf.global_variables_initializer())
sess.run(grp)
print(sess.run(c))