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