首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sklearn.cross_validation.cross_val_score多cpu?

sklearn.cross_validation.cross_val_score多cpu?
EN

Stack Overflow用户
提问于 2014-06-30 04:45:58
回答 2查看 3K关注 0票数 1

我正试图通过与sklearn.cross_validation.cross_val_score的交叉验证来获得一个模型的分数。根据其文档,参数n_jobs设置您可以使用的cpus数量。但是,当我将其设置为-1 (或其他值不等于1)时,程序会抱怨:

AttributeError:_MainProcess对象没有属性“_daemonic”

下面是一个最小的示例,以及相应的错误消息。

代码语言:javascript
复制
import sklearn.datasets
import sklearn.cross_validation
import sklearn.linear_model
d = sklearn.datasets.load_iris()
X = d.data
y = d.target
sklearn.cross_validation.cross_val_score(sklearn.linear_model.LogisticRegression(), X, y, n_jobs=-1)
代码语言:javascript
复制
AttributeError                            
Traceback (most recent call last)
<ipython-input-57-3b5f62e97b0d> in <module>()
    ----> 1 sklearn.cross_validation.cross_val_score(gb_clf, train, train_label, n_jobs=2)

/usr/lib/python3.4/site-packages/sklearn/cross_validation.py in cross_val_score(estimator, X, y,     scoring, cv, n_jobs, verbose, fit_params, score_func, pre_dispatch)
   1150         delayed(_cross_val_score)(clone(estimator), X, y, scorer, train, test,
   1151                                   verbose, fit_params)
-> 1152         for train, test in cv)
   1153     return np.array(scores)
   1154 

/usr/lib/python3.4/site-packages/sklearn/externals/joblib/parallel.py in __call__(self, iterable)
    468             self._pool = None
    469         else:
--> 470             if multiprocessing.current_process()._daemonic:
    471                 # Daemonic processes cannot have children
    472                 n_jobs = 1

AttributeError: '_MainProcess' object has no attribute '_daemonic'

附加信息:我在IPython笔记本模式下运行这个脚本。它也出现在控制台模式下,或者出现在普通python解释器下(per@larsman注释)。

EN

回答 2

Stack Overflow用户

发布于 2014-06-30 11:06:50

将IPython笔记本电脑、NumPy重代码(如scikit learn)和joblib/multiprocessing (当n_jobs != 1时使用)结合在一起是有问题的,并可能导致各种崩溃、冻结和奇怪的错误消息。NumPy/SciPy社区意识到了这一点,但是AFAIK还没有诊断出到底出了什么问题,更不用说产生了修复。(*)我建议您在IPython笔记本之外运行这段代码。

(*)如果您感兴趣,一定要在邮件列表中搜索各种项目。这个问题可能是因为IPython使用了多线程C库ZeroMQ,再加上Python multiprocessing违背POSIX调用fork而不使用exec的习惯。当NumPy在multiprocessing上下文中调用多线程线性代数库时,也会出现类似的问题。

票数 3
EN

Stack Overflow用户

发布于 2017-07-06 20:21:08

您必须保护您的代码:

代码语言:javascript
复制
if __name__ == "__main__":
    [Your code]

当涉及到多个处理时,joblib.Parallel似乎存在问题(n_jobs > 1)。在joblib文档中有更多关于这个问题的信息,还有一个Github螺纹在讨论这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24483050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档