我正在使用sklearn的BaggingClassifier创建一个包含20个Keras NN预测的包。 Keras有一个sklearn包装器,适用于所有东西!但是这个BaggingClassifier似乎会引起问题。
如果我将BaggingClassifier n_jobs设置设置为仅使用一个核心,它可以正常工作!如果我想使用多核,则只会出现此问题。
我用Keras Theano / Tensorflow后端尝试了它,如果n_jobs = 1则工作但是如果n_jobs = -1
则失败失败:
bag = BaggingClassifier(base_estimator=KerasClassifier(build_fn=createKerasTenserflow, nb_epoch=12), n_estimators=20, n_jobs=-1)
bag.fit(scale(X.values), y)
y_proba = bag.predict_proba(scale(Tx.values))
Error message:"TypeError: Cannot interpret feed_dict key as Tensor: Tensor Tensor("Placeholder_1:0", shape=(298,), dtype=float32) is not an element of this graph."
它说它是一个Tensor错误,但它也不能与Theano一起使用。我怀疑BaggingClassifier的并行处理需要在某个时刻腌制Keras模型,这会导致问题......?!
更新
我很确定这是一个腌菜问题,因为经过一些调查(在http://zachmoshe.com/2017/04/03/pickling-keras-models.html的帮助下)它告诉我:
multiprocessing.pool.MaybeEncodingError: Error sending result: '[([<keras.wrappers.scikit_learn.KerasClassifier object at 0x125dc3978>], [array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30])])]'. Reason: 'TypeError("can't pickle module objects",)'
这是我的31个输入功能
更新2
有一个解决方案可以解决这个问题,因为用户crbrinton在https://github.com/fchollet/keras/issues/4274注明了这个问题,但我不知道如何根据我的特定sklearn.BaggingClassifier场景定制它