tensorflow - Combining conditionals and control dependencies -


i'm trying execute conditional piece of code in turn dependent on op executing first. simple versions of work, following:

x = tf.variable(0.) x_op = tf.assign(x, 1.)  tf.control_dependencies([x_op]):     true_fun  = lambda: tf.assign_add(x, 3.)     false_fun = lambda: tf.constant([])     pred = tf.constant(true)     cond_op = control_flow_ops.cond(pred, true_fun, false_fun) 

where evaluating cond_op sets x 4.0 expected. more complex version doesn't work:

def rest(x): tf.gather(x, tf.range(1, tf.size(x)))  x = tf.variable([0., 1.]) x_op = tf.assign(x, [0., 1., 2.], validate_shape=false)  tf.control_dependencies([x_op]):     true_fun  = lambda: tf.assign(x, rest(x), validate_shape=false)     false_fun = lambda: tf.constant([])     pred = tf.constant(true)     cond_op = control_flow_ops.cond(pred, true_fun, false_fun) 

in particular x gets assigned [1.] instead of [1., 2.]. logic i'm going x first assigned [0., 1., 2.], , then gets trimmed [1., 2.]. incidentally appears have size of x changing, since if in initial x_op assignment x gets assigned [1., 2.] instead of [0., 1., 2.], evaluating cond_op results in x being assigned [2.], correct behavior. i.e. first gets updated [1., 2.], , trimmed [2.].

note with tf.control_dependencies applies operations created inside block. when call rest(x) inside block x referring still old x return value of tf.variable function, tensor holding initial value of variable. can pass new value calling rest(x_op) instead. here complete working snippet :

import tensorflow tf  def rest(x): return tf.gather(x, tf.range(1, tf.size(x)))  x = tf.variable([0., 1.]) x_op = tf.assign(x, [0., 1., 2.], validate_shape=false)  tf.control_dependencies([x_op]):   true_fun  = lambda: tf.assign(x, rest(x_op), validate_shape=false)   false_fun = lambda: tf.constant([])   pred = tf.constant(true)   cond_op = tf.cond(pred, true_fun, false_fun)  tf.session(""):   x.initializer.run()   print(cond_op.eval()) 

Comments

Popular posts from this blog

sublimetext3 - what keyboard shortcut is to comment/uncomment for this script tag in sublime -

java - No use of nillable="0" in SOAP Webservice -

ubuntu - Laravel 5.2 quickstart guide gives Not Found Error -