TensorFlow中使用NumPy随机函数输出重复值,需保留该函数时如何生成不同值?
I get it—you need to stick with NumPy's random functions instead of TensorFlow's native ones, but you're stuck with the same value every time. Let's break down why this is happening and how to fix it.
Why You're Getting the Same Value
In your original code, when you do a = get_rand() outside the TensorFlow session, that random number is generated once when the graph is built, not each time you run the session. The tf.Print operation just references that fixed value, so every sess.run(tfprint) will output the same number.
The Solution: Use tf.py_func to Dynamically Generate Random Values
To make NumPy's random function run every time the session executes the operation, you need to wrap it in tf.py_func. This tells TensorFlow to call your NumPy function dynamically during each session run.
Here's the corrected code using NumPy's random function:
import tensorflow as tf import numpy as np def get_rand(): # NumPy's randint uses an exclusive upper bound, so 0-5 needs (0,6) return np.random.randint(0, 6) # Wrap the NumPy function to create a dynamic TensorFlow operation rand_tensor = tf.py_func(get_rand, [], tf.int32) tfprint = tf.Print(rand_tensor, [rand_tensor], message="Random value: ") with tf.Session() as sess: for i in range(10): sess.run(tfprint)
Key Notes:
- NumPy vs Python Random Quirk: Unlike Python's
random.randint, NumPy'snp.random.randint(low, high)treats the upper bound as exclusive. So to get values from 0 to 5 inclusive, use(0, 6). - Dynamic Execution:
tf.py_funcensures your NumPy random call runs fresh every time you execute the operation in the session, instead of being fixed during graph setup. - Seeding for Reproducibility: If you want a consistent sequence of random values (but still different per run), add a seed at the start:
np.random.seed(42) # Fixes the sequence for reproducibility
That should give you a new random value each time you run the session operation!
内容的提问来源于stack exchange,提问作者neouyghur

