sklearn BaggingClassifier + n_jobs = -1 + Keras

时间:2017-07-21 07:15:13

标签: python tensorflow scikit-learn keras theano

我正在使用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场景定制它

0 个答案:

没有答案