python - 如何在 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 = 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_opz2_op 相等。我认为这是因为 random_uniform 操作被调用了两次。有没有办法使用 TensorFlow(不使用 NumPy)来实现这一点?

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

最佳答案

您的代码的当前版本将在每次调用 sess.run() 时为 rand_var_1rand_var_2 随机生成一个新值(尽管由于您将种子设置为 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)

...然后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.

关于python - 如何在 TensorFlow 中生成随机向量并维护它以供进一步使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34888235/

相关文章:

mysql - 如何将随机值插入到 mysql 中?

python - tensorflow 2 : Getting "WARNING:tensorflow:9 out of the last 9 calls to <function> triggered tf.function retracing. Tracing is expensive"

python - 使用 pandas 组合工作表、迭代特定列、将行添加到新列表

python - "self"里面的普通函数?

python - 与 pandas 数据框中的日期绘制保持一致

python - 在 Python 中合并/添加列表

java - 测试字符串的升序

php - 如何在 php 中生成唯一随机数

python - Tensorflow,如何连接具有不同批处理大小的多个数据集

python - 分割层输出时,Keras 抛出 `' Tensor' object has no attribute '_keras_shape'`