Sri*_*ran 10 python random tensorflow
我试图生成一个随机变量并使用它两次.但是,当我第二次使用它时,生成器会创建第二个与第一个不同的随机变量.这是代码来演示:
import numpy as np
import tensorflow as tf
# A random variable
rand_var_1 = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0)
rand_var_2 = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0)
#Op1
z1 = tf.add(rand_var_1,rand_var_2)
#Op2
z2 = tf.add(rand_var_1,rand_var_2)
init = tf.initialize_all_variables()
with tf.Session() as sess:
sess.run(init)
z1_op = sess.run(z1)
z2_op = sess.run(z2)
print(z1_op,z2_op)
Run Code Online (Sandbox Code Playgroud)
我想要z1_op并且z2_op平等.我认为这是因为random_uniformop被调用了两次.有没有办法使用TensorFlow(不使用NumPy)来实现这一目标?
(我的用例更复杂,但这是一个提炼的问题.)
mrr*_*rry 15
你的代码的当前版本将随机生成一个新的值rand_var_1,并rand_var_2在每次调用sess.run()(虽然因为你的种子设置为0,他们将有一个调用中的值相同sess.run()).
如果要保留随机生成的张量的值以供以后使用,则应将其分配给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)
Run Code Online (Sandbox Code Playgroud)
...然后tf.initialize_all_variables()会产生预期的效果:
# 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.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17319 次 |
| 最近记录: |