【问题标题】:How to use Scikit Learn Wrapper around Keras Bi-directional LSTM Model如何围绕 Keras 双向 LSTM 模型使用 Scikit Learn Wrapper
【发布时间】:2019-03-14 16:48:14
【问题描述】:

我创建了一个进行序列分类的 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 框架,我想在 keras 周围使用 Scikit learn Wrapper 使其表现得像 scikit learn。

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

我使用了这些参数:

  • layer1_units = 40
  • layer1_act = 'tanh'
  • go_backwards = 假
  • return_sequences = 真
  • merge_mode = 'concat'
  • lr = 0.01
  • epochs = 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 Traceback(最近一次调用最后一次) 在 () ----> 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 y = np.searchsorted(self.classes_,y) 204 其他: --> 205 raise ValueError('Invalid shape for y: ' + str(y.shape)) 206 self.n_classes_ = len(self.classes_) 207 如果 sample_weight 不是 None:

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

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

【问题讨论】:

  • 您能否将您的问题简化为MCVE?似乎有很多不必要的信息,这使得调试变得困难。尝试以最简单的方式重现问题。
  • 感谢您的回复。我会这样做的。

标签: python tensorflow scikit-learn keras lstm


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 2018-06-04
    • 2016-05-12
    • 2017-03-16
    • 1970-01-01
    • 2020-05-25
    • 2015-12-01
    相关资源
    最近更新 更多