gpt4 book ai didi

python - 多处理中的 numpy.random 种子

转载 作者:太空宇宙 更新时间:2023-11-03 21:28:54 29 4
gpt4 key购买 nike

我有一个随机过程的分布式过程。因此,我使用 numpy.random.RandomState 来播种数字。问题是我必须在包装器中使用另一个 numpy.random 函数。现在我失去了种子的再现性,因为我无法控制函数调用的顺序。

这个问题的简短版本是:

import numpy as np
import multiprocessing

def function(N):
return RDS.choice(range(N))

def wrapper(ic):
return ic,function(ic)

RDS = np.random.RandomState(0)

inputlist = []
for i in range(30):
inputlist.append((RDS.randint(1,100),))

pool = multiprocessing.Pool(4)

solutions_list = pool.starmap(wrapper, inputlist)

pool.close()
pool.join()

print(solutions_list)

我无法在包装器之外运行function(ic),因为在我的代码中它进一步取决于计算结果。

还有其他方法可以正确设置种子吗?

最佳答案

以不同方式设置种子并不能解决重现性问题。 (它可以解决我们稍后会讨论的另一个问题,但它不会解决再现性问题。)您的再现性问题来自于向工作人员分配任务的不确定性,这不受任何随机种子的控制。

为了解决可重复性问题,您需要确定性地分配任务。一种方法是放弃使用进程池并手动将作业分配给进程。

另一个问题是您的工作人员都继承相同的随机种子。 (它们不共享相同的 RDS 对象 - 这不是线程 - 但它们的 RDS 副本初始化相同。)这可能导致它们产生相同或极端的结果相关输出,破坏你的结果。要解决此问题,每个工作线程应在启动时将 RDS 重新设置为不同的种子。

关于python - 多处理中的 numpy.random 种子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53660736/

29 4 0
文章推荐: html - 没有javascript的圆圈上的 flex 文本
文章推荐: c# - String.Format 为阿拉伯文本抛出 'Input string was not in a correct format'
文章推荐: html - 制作一个
文章推荐: C# 继承多态类型
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com