sklearn.externals.joblib.my_exceptions.JoblibValueError: JoblibValueError解决办法

  今天在跑代码的时候又遇到一个问题。parallel·并行程序出现错误。
  具体错误如下:

sklearn.externals.joblib.my_exceptions.JoblibValueError: JoblibValueError

  既然是并行出错了,那我就查看有问题的代码行。代码如下:

# 这个是要并行执行的函数
def accumulate_prediction(predict, X, out,proba ,i):  # all_proba (sub concatenated),predict (whole predict concatenated)
    print(i)
    prediction = predict(X, check_input=False)
    nSamples=X.shape[0]
    sub = np.subtract(prediction[:, 0], prediction[:, 1]).reshape(nSamples, 1)
    if i == 0:
        proba[0]+=prediction
        out[0]+=sub
    else:
         out[0] = np.concatenate((out[0], sub), axis=1)
         proba[0] = np.concatenate((proba[0], prediction), axis=1)
-----------------------------------------------------------------------------------------
#下面是并行代码的执行处
 n_jobs, _, _ = _partition_estimators(self.n_estimators, self.n_jobs)

 all_proba = [np.zeros((X.shape[0], j), dtype=np.float64) for j in np.atleast_1d(1)]
 predict = [np.zeros((X.shape[0], j), dtype=np.float64) for j in np.atleast_1d(self.n_classes_)]
 # 并行代码
 Parallel(n_jobs=n_jobs, verbose=self.verbose, backend="threading")(
        delayed(accumulate_prediction)(e.predict_proba, X, all_proba, predict, i)
         for i, e in enumerate(self.estimators_, start=0)
    )

  需要并行执行的代码accumulate_prediction(predict, X, out,proba ,i)每次对传入的数组进行操作预测操作,并对预测的结果进行处理,在这个函数中,数组outproba的容量会一直增加。这是基本情况。
  后来百度了一下解决方案,还到 joblibgithub上提问,才发现。joblibParallel对于并行执行函数的参数过大时,且n_jobs>1时,会出现并行执行的结果出错,我的代码执行是依赖于这个函数中i的执行顺序的,所以,我的程序就华丽丽的抛出了错误。
  思考:最开始写这个并行的代码是为了加快速度,但是我这个情况不适用啊,所以还是退而求其次,近似串行执行吧。
  解决办法:将并行程序的n_jobs设置为1,问题就解决了。

self.n_jobs=1
n_jobs, _, _ = _partition_estimators(self.n_estimators, self.n_jobs)

have a nice day!

你可能感兴趣的:(python文件操作,python)