Scipy:使用多线程的Brute(网格搜索)?

z8dt9xmd  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(167)

我正在使用scipy.optimize.brute(),但我注意到它只使用了我的一个内核。网格搜索的一个很大的优点是使求解算法的所有迭代都相互独立。
既然如此,为什么brute()没有实现为在多核上运行?如果没有好的理由,是否有一种快速的方法来扩展它/使它工作,或者从头开始编写整个例程更有意义?

x9ybnkn6

x9ybnkn61#

scipy.optimize.brute接受一个任意的Python函数。不能保证这个函数是线程安全的。即使它是线程安全的,Python的全局解释器锁意味着除非这个函数绕过C语言中的GIL,否则它不能在多个内核上运行。
如果你想并行化你的暴力搜索,你应该自己编写它。你可能必须编写一些Cython或C来绕过GIL。

f0brbegy

f0brbegy2#

你安装了scikit-learn吗?通过一些重构,你可以使用sklearn.grid_search.GridSearchCV,它通过joblib支持多处理。
你需要将你的局部优化函数 Package 成一个公开通用scikit-learn估计器接口的对象,包括一个.score(...)方法(或者你可以通过scoring= kwarg将一个单独的评分函数传递给GridSearchCV构造函数)。

相关问题