繁体   English   中英

函数内多处理 scipy 优化的奇怪行为

[英]weird behavior of multiprocessing scipy optimization inside of a function

这是一个运行良好的简单代码。 即使函数最小化包装了 scipy.optimize.minimize 它也不会抱怨酸洗

import numpy as np
from scipy import optimize
from multiprocessing import Pool

def square(x):
    return np.sum(x**2+ 2*x)

def minimize(args):
    f,x = args
    res = optimize.minimize(f, x, method = 'L-BFGS-B')
    return res.x

x = np.random.rand(8,10)

args = [(square,x[i]) for i in range(8)]
p = Pool(8)
p.map(minimize,args)

但是,如果尝试以下操作,则会因酸洗错误而失败

PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

def run():
    def square(x):
        return np.sum(x**2+ 2*x)

    def minimize(args):
        f,x = args
        res = optimize.minimize(f, x, method = 'L-BFGS-B')
        return res.x

    x = np.random.rand(8,10)

    args = [(square,x[i]) for i in range(8)]
    p = Pool(8)
    p.map(minimize,args)

run()

我想制作一个模块来使用 scipy 最小化与许多初始猜测群体并行。 但是,如示例所示,当我将其设为模块时,它失败了。

问题是 Python 不能腌制嵌套函数,在您的第二个示例中,您试图将嵌套的minimizesquare函数传递给您的子进程,这需要腌制。

如果没有理由必须嵌套这两个函数,将它们移到模块的顶层将解决问题。 您还可以查看此问题以了解腌制嵌套函数的技术。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM