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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值