I am building a proof-of-concept around running sub-graphs without recomputing, using tensorflow\'s partial_run() methods.
Currently I have a simple little python script
The error message is quite explicit: You must run the setup before (every) partial run. I think this is the reference.
Additionally your ilist
list of dicts only works for 2 runs. In the third run you only feed a value for a - this won't work. Here is a sample loop that works for me:
ilist = [{a: 1, b: 1}, {a: 2, b: 2}, {a: 1, b: 1}, {a: 1, b: 3}]
with tf.Session() as sess:
for i, fd in enumerate(ilist):
hdle = sess.partial_run_setup([y], [a, b])
y_r = sess.partial_run(hdle, y, feed_dict=fd)
eout = fd[a] * fd[b] + 1
print("got {}, expected {}".format(y_r, eout))
This example from API documentation works :
import tensorflow as tf
a = tf.placeholder(tf.float32, shape=[])
b = tf.placeholder(tf.float32, shape=[])
c = tf.placeholder(tf.float32, shape=[])
r1 = tf.add(a, b)
r2 = tf.multiply(r1, c)
with tf.Session() as sess:
h = sess.partial_run_setup([r1, r2], [a, b, c])
res = sess.partial_run(h, r1, feed_dict={a: 1, b: 2})
res = sess.partial_run(h, r2, feed_dict={c: 2})
print(res) #prints 6.0
But if we add on more invocation it doesn't . If this doesn't work what is the points in using partial_run.
import tensorflow as tf
a = tf.placeholder(tf.float32, shape=[])
b = tf.placeholder(tf.float32, shape=[])
c = tf.placeholder(tf.float32, shape=[])
r1 = tf.add(a, b)
r2 = tf.multiply(r1, c)
with tf.Session() as sess:
h = sess.partial_run_setup([r1, r2], [a, b, c])
res = sess.partial_run(h, r1, feed_dict={a: 1, b: 2})
res = sess.partial_run(h, r2, feed_dict={c: 2})
res = sess.partial_run(h, r2, feed_dict={c: 3})
print(res)
InvalidArgumentError: Must run 'setup' before performing partial runs!