cross_val_score在Windows10,错误与并行计算
,当我试图用cross_val_score与n_job不等于1cross_val_score在Windows10,错误与并行计算
我的系统,我遇到了一个错误是Intel的i7处理器,Windows10,python3.6 ,Spyder。
下面是我的代码:
from numpy.random import randn
import pandas as pd
from keras.wrappers.scikit_learn import KerasClassifier
from sklearn.model_selection import cross_val_score
from keras.models import Sequential
from keras.layers import Dense
# build a data set
dataset = pd.DataFrame(randn(100, 2), columns='X1 X2'.split())
dataset["Y"]=dataset["X1"]+dataset["X2"]
# seperate X and y
X = dataset.iloc[:, 0:2].values
Y = dataset.iloc[:, 2].values
# define classifier
def build_classifier():
classifier = Sequential()
classifier.add(Dense(units = 2, kernel_initializer = 'uniform', activation = 'relu', input_dim = 2))
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 = 1, epochs = 4)
class testnjob():
def run():
accuracies = cross_val_score(estimator = classifier, X = X, y = Y, cv = 5, n_jobs = -1)
return(accuracies)
if __name__ == '__main__':
accuracies = testnjob.run()
错误消息是:
ImportError: [joblib] Attempting to do parallel computing without protecting
your import on a system that does not support forking. To use parallel-
computing in a script, you must protect your main loop using
"if __name__ == '__main__'". Please see the joblib documentation on Parallel
for more information
的代码工作,如果我设置n_jobs = 1。
有没有办法解决这个问题?
补充:代码适用于Linux虚拟机。我尝试在Virtualbox,anaconda(python 3.6)+ spyder(Tensorflow后端)上使用Ubuntu。
补充:我试过在pycharm相同的代码,不同的错误消息出现了:
AttributeError: Can't get attribute 'build_classifier' on
<module '__main__' (built-in)>
谢谢!
你可以试试这个,因为你使用的Spyder它应该很好地工作:
代码
import...
Class Test(object):
def __init__(self):
accuracies = cross_val_score(estimator = classifier, X = X_train, y = y_train, cv = 10, n_jobs = -1)
###code here
###code here
if __name__ == '__main__':
Test()
希望这有助于。
与Spyder的和n_jobs类似的问题,我的帖子在这里link
编辑
解决我修改你的代码的最后一部分,它在Windows 8.1中运行良好。
另外,我使用:Theano后端。
变更部分:
from numpy.random import randn
...
...
classifier = KerasClassifier(build_fn = build_classifier, batch_size = 1, epochs = 4)
####################################################################
#changed part from here
class run():
def __init__(self):
cross_val_score(estimator = classifier, X = X, y = Y, cv = 5, n_jobs = -1)
if __name__ == '__main__':
run()
截图:
是否需要克服该问题的'class'对象?为什么不把它包装在一个简单的方法?另外,您应该在包装器中添加“print(accurasies)”,否则您将不会收到任何输出。 –
@ E.Z。这不是必须的,但是这已经解决了n_jobs和spyder的类似问题。我认为这是值得try.lets等待谁提问 – sera
@ sera的人的反馈我仍然在Spyder中看到同样的错误。我也尝试了pycharm,它产生了一个不同的错误信息,请参阅我编辑过的帖子的底部。我编辑你的代码给我返回,而我也试过你的代码,这产生了和我一样的错误(在Spyder/pycharm中)。 –
你能为了尽可能读者能够重现你的错误提供了一个小型的代码样本? –
在Linux上,你不应该有这个问题。我发布了一个可能的解决方案。 – sera
@sera谢谢。我试过了,它可以在Linux上运行(我在Virtualbox上的Ubuntu上尝试过)。我现在将此用作解决方案。 –