How to assign a value to a TensorFlow variable? How to assign a value to a TensorFlow variable? python python

How to assign a value to a TensorFlow variable?


In TF1, the statement x.assign(1) does not actually assign the value 1 to x, but rather creates a tf.Operation that you have to explicitly run to update the variable.* A call to Operation.run() or Session.run() can be used to run the operation:

assign_op = x.assign(1)sess.run(assign_op)  # or `assign_op.op.run()`print(x.eval())# ==> 1

(* In fact, it returns a tf.Tensor, corresponding to the updated value of the variable, to make it easier to chain assignments.)

However, in TF2 x.assign(1) will now assign the value eagerly:

x.assign(1)print(x.numpy())# ==> 1


You can also assign a new value to a tf.Variable without adding an operation to the graph: tf.Variable.load(value, session). This function can also save you adding placeholders when assigning a value from outside the graph and it is useful in case the graph is finalized.

import tensorflow as tfx = tf.Variable(0)sess = tf.Session()sess.run(tf.global_variables_initializer())print(sess.run(x))  # Prints 0.x.load(1, sess)print(sess.run(x))  # Prints 1.

Update: This is depricated in TF2 as eager execution is default and graphs are no longer exposed in the user-facing API.


First of all you can assign values to variables/constants just by feeding values into them the same way you do it with placeholders. So this is perfectly legal to do:

import tensorflow as tfx = tf.Variable(0)with tf.Session() as sess:    sess.run(tf.global_variables_initializer())    print sess.run(x, feed_dict={x: 3})

Regarding your confusion with the tf.assign() operator. In TF nothing is executed before you run it inside of the session. So you always have to do something like this: op_name = tf.some_function_that_create_op(params) and then inside of the session you run sess.run(op_name). Using assign as an example you will do something like this:

import tensorflow as tfx = tf.Variable(0)y = tf.assign(x, 1)with tf.Session() as sess:    sess.run(tf.global_variables_initializer())    print sess.run(x)    print sess.run(y)    print sess.run(x)