控制sklearn MLPClassifier使用的CPU内核数?

时间:2019-02-10 18:03:03

标签: python scikit-learn cpu-cores

sklearn.neural_network中的MLPClassifier似乎使用了许多可用的CPU内核,即在拟合模型时python进程开始使用50%的处理能力。如何预防呢?可能吗?从文档看来,似乎没有n_jobs参数可以控制此行为。我正在使用11月Winpython发行版中的sklearn版本0.20。在我的笔记本上这很好,但在其他人使用的服务器上也不好。

2 个答案:

答案 0 :(得分:2)

不确定您是否尝试过动态设置线程数而不是全局设置(通过环境变量),但是我建议尝试使用mkl设置线程数:

import mkl
mkl.set_num_threads(3)

从个人经验来看,我注意到在脚本顶部添加了上面两行代码后,即使我正在训练一个Windows Server 2003,我的CPU使用率也会达到26%〜28%(使用12个CPU的台式机)。 MLPClassifier,没有设置n_jobs的选项。

答案 1 :(得分:0)

您可以将MLPClassifier包装在GridSearchCV中吗?使用GridSearchCV将允许您设置n_jobs,并且如果希望运行GridSearchCV而不进行交叉验证,则可以选择使用ShuffleSplit。

例如:

from sklearn.neural_network import MLPClassifier
from sklearn.datasets import make_classification
from sklearn.model_selection import GridSearchCV, ShuffleSplit

X,y = make_classification(n_samples=100000)
mlp = MLPClassifier()

grid = GridSearchCV(mlp, {}, n_jobs=1, cv=ShuffleSplit(n_splits=1),
                    verbose=2)
grid.fit(X,y)