【发布时间】: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