BrokenProcessPool在cross_val_score中使用n_jobs参数



sklearn.model_selection.cross_val_score中使用n_jobs = -1作为参数时出错。我是深度学习和人工神经网络的初学者,根据本课程k倍交叉验证的讲师,使用n_jobs = -1来使用CPU的所有处理器以减少时间,但在我的情况下,这会带来错误。

错误-

BrokenProcessPool:任务无法取消序列化。请确保函数的参数都是可拾取的。

可以在此处找到完整的堆栈跟踪。

import keras
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
def build_classifier():
classifier = Sequential()
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu', input_dim = 11))
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
return classifier
classifier = KerasClassifier(build_fn = build_classifier, batch_size = 10, nb_epoch = 100)
accuracies = cross_val_score(estimator = classifier, X = X_train, y = Y_train, cv = 10, n_jobs = -1)

尝试在外部文件中创建build_classifier函数并导入它。例如:

在文件classifier_builder.py:中

import keras
def build_classifier():
classifier = Sequential()
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu', input_dim = 11))
classifier.add(Dense(units = 6, kernel_initializer = 'uniform', activation = 'relu'))
classifier.add(Dense(units = 1, kernel_initializer = 'uniform', activation = 'sigmoid'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
return classifier

然后在你的笔记本上:

import classifier_builder
classifier = KerasClassifier(build_fn = build_classifier, batch_size = 10, nb_epoch = 100)
accuracies = cross_val_score(estimator = classifier, X = X_train, y = Y_train, cv = 10, n_jobs = -1)

这为我解决了问题。显然,内联函数是不可拾取的。

n_jobs=-1不工作,因为你的gpu关闭了,或者我说gpu没有激活,你可以用cuda命令激活它,或者使用这些链接激活tensorflow gpu

为Windows和Anaconda 安装Tensorflow(GPU版本(

如何在Windows 10 上安装Tensorflow GPU

或者你可以参考这个,让n_jobs理解

通用术语和API元素术语表-n-jobs

我使用n_jobs=1 跳过了错误

相关内容

  • 没有找到相关文章

最新更新