keras + scikit-learn 包装器,当 GridSearchCV 与 n_jobs >1 时似乎挂起

Ziq*_*iqi 6 scikit-learn theano keras tensorflow neuraxle

更新:我必须重新编写这个问题,因为经过一些调查,我意识到这是一个不同的问题。

上下文:使用带有 scikit learn 的 kerasclassifier 包装器在 gridsearch 设置中运行 keras。系统:Ubuntu 16.04,库:anaconda 发行版 5.1、keras 2.0.9、scikitlearn 0.19.1、tensorflow 1.3.0 或 theano 0.9.0,仅使用 CPU。

代码: 我只是使用这里的代码进行测试:https : //machinelearningmastery.com/use-keras-deep-learning-models-scikit-learn-python/,第二个示例“网格搜索深度学习模型参数”。请注意第 35 行,内容如下:

grid = GridSearchCV(estimator=model, param_grid=param_grid)
Run Code Online (Sandbox Code Playgroud)

症状:当网格搜索使用超过 1个作业时(是指 cpus?),例如,将上面 A 行上的“n_jobs”设置为“2”,下面一行:

grid = GridSearchCV(estimator=model, param_grid=param_grid, n_jobs=2)
Run Code Online (Sandbox Code Playgroud)

将导致代码无限期挂起,无论是使用 tensorflow 还是 theano,并且没有 cpu 使用(请参见附加的屏幕截图,其中创建了 5 个 python 进程,但没有一个正在使用 cpu)。

在此处输入图片说明

通过调试,似乎是以下带有“sklearn.model_selection._search”的行导致了问题:

line 648: for parameters, (train, test) in product(candidate_params,
                                               cv.split(X, y, groups)))
Run Code Online (Sandbox Code Playgroud)

,程序挂起无法继续。

我真的很感激一些关于这意味着什么以及为什么会发生这种情况的见解。

提前致谢

Fel*_*ida 5

你在使用 GPU 吗?如果是这样,您就不能让多个线程运行参数的每个变体,因为它们将无法共享 GPU。

这是一个关于如何在带有 GridsearchCV 的管道中使用 keras、sklearn 包装器的完整示例:带有 Keras模型的管道

如果你真的想在 GridSearchCV 中有多个作业,你可以尝试限制每个作业使用的 GPU 分数(例如,如果每个作业只分配 0.5 可用的 GPU 内存,你可以同时运行 2 个作业)

看到这些问题: