TensorFlow random.uniform()输出不均?请求技术排查
问题:TensorFlow random.uniform() 输出不符合均匀分布预期?
我尝试用以下代码测试TensorFlow的random.uniform()函数是否输出近似均匀分布:
value_count = {1: 0, 2: 0, 3: 0, 4: 0, 5: 0} import matplotlib.pyplot as plt import numpy as np for i in range(0, 10000): random_1 = tf.random.uniform(shape=(1,), minval=1, maxval=6, dtype=tf.int32) value_count[int(random_1[0])] = value_count[int(random_1[0])] + 1 keys, values = zip(*value_count.items()) print(keys) plt.plot(keys, values) plt.show()
我预期得到近似平行于X轴的直线,但两次运行结果均不符合预期,从未出现近似水平的直线。请问我是否操作有误,或是对该函数的理解存在偏差?
解答
核心问题与修正方案
缺少TensorFlow库导入
代码中直接使用tf前缀调用API,但未导入TensorFlow,会导致运行报错。需在代码开头添加:import tensorflow as tf可视化方式不直观
用折线图展示离散数值的计数,容易放大视觉上的小波动,改用柱状图更能清晰呈现均匀分布的特征——每个数值的出现次数应集中在2000左右(10000次采样,5个数值均分)。循环采样效率低
逐个生成样本的循环可以用向量化操作替代,既提升效率,也能避免循环中的潜在问题,结果更稳定。
修正后的完整代码
import tensorflow as tf import matplotlib.pyplot as plt import numpy as np # 一次性生成10000个[1,6)区间的整数(即1-5) random_values = tf.random.uniform(shape=(10000,), minval=1, maxval=6, dtype=tf.int32).numpy() # 统计每个数值的出现次数 keys = [1, 2, 3, 4, 5] values = [np.sum(random_values == k) for k in keys] # 用柱状图展示分布 plt.bar(keys, values) plt.title("TensorFlow random.uniform() 分布统计") plt.xlabel("数值") plt.ylabel("出现次数") plt.ylim(1800, 2200) # 限制y轴范围,更易观察均匀性 plt.show()
关于函数的理解验证
你对tf.random.uniform()的区间理解是正确的:对于整数类型的输出,该函数遵循左闭右开区间规则,即minval ≤ 生成值 < maxval,所以minval=1, maxval=6确实只会生成1-5的整数。10000次采样下,每个数值的出现次数理论均值为2000,实际结果会在均值附近小幅波动(标准差约为40),符合均匀分布的预期。
内容的提问来源于stack exchange,提问作者Deepak Tatyaji Ahire
相关产品推荐
相关产品推荐

