sklearn.neural_network中的MLPClassifier似乎使用了很多可用的CPU内核,即python进程在拟合模型时开始使用50%的处理能力。如何预防这种情况?可能吗?从文档中看,似乎没有n_jobs参数来控制此行为。我正在使用十一月Winpython发行版中的sklearn版本0.20。这在我的笔记本上很好,但在其他人使用的服务器上也不好。
不确定您是否尝试过动态设置线程数而不是全局设置(通过环境变量(,但我建议尝试使用 mkl
设置线程数:
import mkl
mkl.set_num_threads(3)
根据个人经验,我注意到在脚本顶部添加上面的两行代码后,即使我正在训练一个没有设置n_jobs
选项的MLPClassifier
,我的 CPU 使用率也会上限在 26~28% 左右(使用具有 12 个 CPU 的桌面(。
你的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)