Tensorflow, how to preserve the intermediate node value and reuse them -
assuming have following graph.
- x3 , z values care about.
- x , y inputs. in each different. iteration, coming values , shapes of x , y different, think placeholder
- circumstance need run graph twice in different time point x3 , z asynchronously.
+---+ op: +1 op: *3 | x +------------> x_1 +-----------> x3 +---+ +---+ + + | y | | | +-+-+ | op:add | | | | | | | | op: add v op:add | +-------------> <------------+ z at time point, input x(say x=7 , don't know what's y @ moment). want see value of x3. execute sess.run([x3], {x:7}), returns 24 expected.
at later time point, input y(say y=8), , time want take @ node z. point have to execute sess.run([z], {x:7, y:8}) result.
the problem is, later run, have feed x again recalculate intermediate node x_1 , x3. calculates flow x--> x_1 --> x3 twice hurts efficiency.
my idea x_1 , x3 contain values(x_1=8,x3=24) after run until graph destroyed, can directly leverage instead of recalculating.
is there way achieve goal?
the following doesn't solve problem completely, gets away feeding x again:
x_temp = tf.variable(0, dtype=tf.int32) x = tf.placeholder_with_default(x_temp, shape=()) y = tf.placeholder(tf.int32, shape=()) x_temp = tf.assign(x_temp, x) x_1 = x_temp + 1 x3 = x_1 * 3 z = x_1 + x3 + y sess = tf.interactivesession() print(sess.run(x3, {x:7})) print(sess.run(z, {y:8})) #24 #40
Comments
Post a Comment