相关疑难解决方法(0)

为什么 numpy 随机种子没有保持固定但 RandomState 在并行运行时是?

我运行蒙特卡罗模拟并行使用joblib。然而,我注意到虽然我的种子是固定的,但我的结果一直在变化。但是,当我连续运行该过程时,它如我所料保持不变。

下面我实现了一个小例子,模拟具有较高方差的正态分布的均值。

加载库并定义函数

import numpy as np
from joblib import Parallel, delayed

def _estimate_mean():
    np.random.seed(0)
    x = np.random.normal(0, 2, size=100)
    return np.mean(x)
Run Code Online (Sandbox Code Playgroud)

串联实现的第一个示例- 结果都与预期相同。

tst = [_estimate_mean() for i in range(8)]
In [28]: tst
Out[28]:
[0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897]
Run Code Online (Sandbox Code Playgroud)

在 Parallel 中实现的第二个例子:(注意有时手段是一样的,其他时候不一样)

tst = Parallel(n_jobs=-1, backend="threading")(delayed(_estimate_mean)() for i in range(8))

In [26]: tst
Out[26]:
[0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.11961603106897,
 0.1640259414956747,
 -0.11846452111932627,
 -0.3935934130918206]
Run Code Online (Sandbox Code Playgroud)

我希望并行运行与固定种子相同。我发现如果我实施RandomState修复种子似乎可以解决问题:

def _estimate_mean():
    local_state …
Run Code Online (Sandbox Code Playgroud)

python parallel-processing numpy random-seed

8
推荐指数
1
解决办法
1160
查看次数

有没有办法使 scipy curve_fit 具有确定性?

尝试使用 curve_fit (scipy API,用于拟合 sigmoid)和 numpy 的固定种子,但结果仍然有所不同。有没有办法让它完全确定性?

根据评论中的要求,这是一个最小的工作示例:

from scipy.optimize import curve_fit
import numpy as np

def sigmoid(x, b, mu, max_kr):
    if isinstance(x, list) or isinstance(x, np.ndarray):
        return [sigmoid(xx, b, mu, max_kr) for xx in x]
    else:
        return max_kr/(1+10**(mu*(-x+b)))

def fit_sigmoid(points):
    xs, ys = list(zip(*points))
    err = None
    popt, pcov = curve_fit(sigmoid, xs, ys, bounds=([-np.inf, 0, 0],    [np.inf, np.inf, 1]), ftol=len(xs)*1e-6)
    b, mu, max_kr = popt
    return mu

np.random.seed = 12
points1 = [(4.0, 1.0), (1.0, 8.340850913002296e-05), (3.0, 0.9793319563421965), (0.0, …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting scipy

6
推荐指数
1
解决办法
836
查看次数