How do I generate a random vector in TensorFlow and maintain it for further use?

前端 未结 2 914
感情败类
感情败类 2021-02-20 14:40

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

2条回答
  •  自闭症患者
    2021-02-20 14:58

    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.
    

提交回复
热议问题