You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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轴的直线,但两次运行结果均不符合预期,从未出现近似水平的直线。请问我是否操作有误,或是对该函数的理解存在偏差?


解答

核心问题与修正方案

  1. 缺少TensorFlow库导入
    代码中直接使用tf前缀调用API,但未导入TensorFlow,会导致运行报错。需在代码开头添加:

    import tensorflow as tf
    
  2. 可视化方式不直观
    用折线图展示离散数值的计数,容易放大视觉上的小波动,改用柱状图更能清晰呈现均匀分布的特征——每个数值的出现次数应集中在2000左右(10000次采样,5个数值均分)。

  3. 循环采样效率低
    逐个生成样本的循环可以用向量化操作替代,既提升效率,也能避免循环中的潜在问题,结果更稳定。

修正后的完整代码

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 08:31:01