ibab
ibab

Reputation: 984

Avoid cluttering the tensorflow graph with assign operations

I have to run something like the following code

import tensorflow as tf

sess = tf.Session()
x = tf.Variable(42.)

for i in range(10000):
    sess.run(x.assign(42.))
    sess.run(x)
    print(i)

several times. The actual code is much more complicated and uses more variables. The problem is that the TensorFlow graph grows with each instantiated assign op, which makes the graph grow, eventually slowing down the computation.

I could use feed_dict= to set the value, but I would like to keep my state in the graph, so that I can easily query it in other places.

Is there some way of avoiding cluttering the current graph in this case?

Upvotes: 1

Views: 1298

Answers (2)

VasyaPavlov
VasyaPavlov

Reputation: 21

Each time you call sess.run(x.assign(42.)) two things happen: (i) a new assign operation is added to the computational graph sess.graph, (ii) the newly added operation executes. No wonder the graph gets pretty large if loop repeats many times. If you define assignment operation before execution (asgnmnt_operation in example below), just a single operation is added to the graph so the performance is great:

import tensorflow as tf


x = tf.Variable(42.)
c = tf.constant(42.)
asgnmnt_operation = x.assign(c) 
sess = tf.Session()

for i in range(10000):
    sess.run(asgnmnt_operation) 
    sess.run(x)
    print(i)

Upvotes: 2

ibab
ibab

Reputation: 984

I think I've found a good solution for this: I define a placeholder y and create an op that assigns the value of y to x. I can then use that op repeatedly, using feed_dict={y: value} to assign a new value to x. This doesn't add another op to the graph. It turns out that the loop runs much more quickly than before as well.

import tensorflow as tf

sess = tf.Session()

x = tf.Variable(42.)
y = tf.placeholder(dtype=tf.float32)

assign = x.assign(y)

sess.run(tf.initialize_all_variables())

for i in range(10000):
    sess.run(assign, feed_dict={y: i})
    print(i, sess.run(x))

Upvotes: 4

Related Questions