I am trying to generate a random variable and use it twice. However, when I use it the second time, the generator creates a second random variable that is not identical to the f
The current version of your code will randomly generate a new value for rand_var_1
and rand_var_2
on each call to sess.run()
(although since you set the seed to 0, they will have the same value within a single call to sess.run()
).
If you want to retain the value of a randomly-generated tensor for later use, you should assign it to a tf.Variable:
rand_var_1 = tf.Variable(tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0))
rand_var_2 = tf.Variable(tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0))
# Or, alternatively:
rand_var_1 = tf.Variable(tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0))
rand_var_2 = tf.Variable(rand_var_1.initialized_value())
# Or, alternatively:
rand_t = tf.random_uniform([5], 0, 10, dtype=tf.int32, seed=0)
rand_var_1 = tf.Variable(rand_t)
rand_var_2 = tf.Variable(rand_t)
...then tf.initialize_all_variables() will have the desired effect:
# Op 1
z1 = tf.add(rand_var_1, rand_var_2)
# Op 2
z2 = tf.add(rand_var_1, rand_var_2)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init) # Random numbers generated here and cached.
z1_op = sess.run(z1) # Reuses cached values for rand_var_1, rand_var_2.
z2_op = sess.run(z2) # Reuses cached values for rand_var_1, rand_var_2.
print(z1_op, z2_op) # Will print two identical vectors.
Your question has the same issue as this question, in that if you call random_uniform
twice you will get two results, and as such you need to set your second variable to the value of the first. That means that, assuming you are not changing rand_var_1
later, you can do this:
rand_var_1 = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0)
rand_var_2 = rand_var_1
But, that said, if you want z1
and z2
to be equal, why have separate variables at all? Why not do:
import numpy as np
import tensorflow as tf
# A random variable
rand_var = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0)
op = tf.add(rand_var,rand_var)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
z1_op = sess.run(op)
z2_op = sess.run(op)
print(z1_op,z2_op)