如何在Keras双向LSTM模型周围使用Scikit学习包装器

时间:2018-10-09 20:37:27

标签: python tensorflow scikit-learn keras lstm

我创建了一个进行序列分类的Keras LSTM模型。 我在训练集中有27个序列,在测试集中有18个序列。每个序列都有4000个时间步,我通过填充零来实现。每个序列是2499个并行序列的组合。这意味着我有2499个功能。

  • X_Train的尺寸为(27 x 4000 x 2499) :27个序列,每个序列有4000个时间步长,并具有2499个功能。
  • Y_Train的尺寸为(27 x 4000 x 1)
  • X_Test的尺寸为(18 x 4000 x 2499)
  • Y_Test的尺寸为(18 x 4000 x 1)

我正在使用将return_sequences设置为True的双向LSTM模型

我的最终目标是使用ELI5软件包的置换重要性获得特征重要性。

由于ELI5软件包不支持Keras框架,因此我想使用Scikit Learn Wrapper围绕keras进行操作,使其表现得像scikit Learn。

然后,我终于可以在模型上使用ELI5软件包来获得重要功能。

我使用了以下参数:

  • layer1_units = 40
  • layer1_act ='tanh'
  • go_backwards = False
  • return_sequences = True
  • merge_mode ='concat'
  • lr = 0.01
  • 历元= 2
  • batch_size = 200

我将在KerasClassifier()的build_fn属性中使用此lstm模型。

model = KerasClassifier(build_fn= lstm_Trial.model(),  epochs=3, batch_size=40, verbose=1)

然后我正在尝试使用.fit()方法。

model.fit(x = X_Train, y = Y_Train_Ori)

这会引发错误。


  

ValueError跟踪(最近一次通话最近)    在()中   ----> 1个模型.fit(x = X_Train,y = Y_Train_Ori)    〜/ anaconda3 / lib / python3.6 / site-packages / keras / wrappers / scikit_learn.py in fit(self,x,y,sample_weight,** kwargs)       第203章       204其他:   -> 205提高ValueError('y的无效形状:'+ str(y.shape))       206 self.n_classes_ = len(self.classes_)       207如果sample_weight不是None:

     

ValueError:y的形状无效:(27,4000,1)

如何正确使用KerasClassifier,以便最终能够使用ELI5软件包?

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,为避免重复发布,我想与您分享my answer,我已在另一个与您类似的Stackoverflow问题上发布了该问题。

TL; DR:eli5需要2d数组,而LSTM图层需要3d数组,因此您目前无法使其工作