Numpy default_rng设置随机种子,重复运行结果不一致问题求助
问题原因及解决方法
核心问题
你代码里的normal()调用的是全局numpy随机生成器,而非每个worker内部创建的rng实例的方法。全局生成器的状态会在每次调用时被修改,导致多次运行结果不一致,而且完全没用到你为每个worker单独初始化的rng对象。
修正代码
把print(normal())改成print(rng.normal()),确保使用每个worker独立的随机生成器:
from numpy.random import default_rng, normal def worker(root_seed, worker_id): rng = default_rng([worker_id, root_seed]) print(rng.normal()) # 改用当前worker的rng实例方法 root_seed = 0x8c3c010cb4754c905776bdac5ee7501 results = [worker(root_seed, worker_id) for worker_id in range(5)]
更规范的并行种子设置(官方推荐)
使用SeedSequence衍生独立子种子,避免手动构造种子列表,更适配并行场景:
from numpy.random import SeedSequence, default_rng def worker(seed): rng = default_rng(seed) print(rng.normal()) root_seed = 0x8c3c010cb4754c905776bdac5ee7501 ss = SeedSequence(root_seed) worker_seeds = ss.spawn(5) # 生成5个互不干扰的子种子 results = [worker(seed) for seed in worker_seeds]
这样无论串行还是并行运行,相同根种子下每个worker的输出都会完全一致,且各worker的随机序列互相独立,不会产生状态干扰。
内容的提问来源于stack exchange,提问作者user2974951
相关产品推荐
相关产品推荐

