Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在TensorFlow中生成一个随机向量并维护它以供进一步使用?_Python_Random_Tensorflow - Fatal编程技术网

Python 如何在TensorFlow中生成一个随机向量并维护它以供进一步使用?

Python 如何在TensorFlow中生成一个随机向量并维护它以供进一步使用?,python,random,tensorflow,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 =

我试图生成一个随机变量并使用它两次。但是,当我第二次使用它时,生成器会创建一个与第一个随机变量不同的第二个随机变量。下面是要演示的代码:

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)
我希望
z1_op
z2_op
相等。我认为这是因为
random\u uniform
op被调用了两次。有没有一种方法可以使用TensorFlow(不使用NumPy)来实现这一点


(我的用例更复杂,但这是一个提炼的问题。)

您的问题与相同,因为如果调用两次
random\u uniform
,您将得到两个结果,因此您需要将第二个变量设置为第一个变量的值。这意味着,假设您以后不更改
rand\u var\u 1
,您可以这样做:

rand_var_1 = tf.random_uniform([5],0,10, dtype = tf.int32, seed = 0)
rand_var_2 = rand_var_1
但是,也就是说,如果你想让
z1
z2
相等,为什么要有单独的变量呢?为什么不:

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)

当前版本的代码将在每次调用
sess.run()
时为
rand\u var\u 1
rand\u var\u 2
随机生成一个新值(尽管由于您将seed设置为0,它们在单个调用
sess.run()
中具有相同的值)

如果要保留随机生成的张量值以供以后使用,应将其指定给:

…然后将产生预期的效果:

# 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.

我将得到两个结果,但由于我将两个种子都设置为零,因此两个结果必须相同。将第二个值设置为第一个值对我来说不起作用,因为在我的实际用例中,第二个值是随机变量的不同函数。我为我的误导性例子道歉。同样,“z1_op”和“z2_op”在我的代码中也是不同的。我在这里只是用它们来说明在每个步骤中使用了不同的随机数。如果我不能控制
sess.run
,这将如何工作?我在估计器中使用它,所以所有会话管理都是隐藏的。我的函数
g()
需要调用
f(t)
两次,使用相同的
t
。但是,每次调用
g()
,我都需要一个不同的
t
。基本上,我想在函数的整个过程中缓存
tf.random_uniform()
的结果
g()
@cipriantomoagă:如果您还没有这样做,请问一个新问题。有意义。我想我已经弄明白了。放假后我会写一封问答信。谢谢
# 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.