如何为Keras中的Bi-LSTM准备2D形状

时间:2019-05-20 13:18:12

标签: python keras lstm bidirectional

我有一个已经压缩的字向量的2D numpy矩阵(来自DataFrame)(我使用了最大池技术,正在尝试将logres与bi-LSTM方法进行比较),但我不确定如何准备将其用于keras模型中。

我知道Bi-LSTM模型需要3D张量,并且已经尝试使用谷歌搜索解决方案,但是找不到可行的解决方案。

这就是我现在拥有的:

# Set model parameters
epochs = 4
batch_size = 32
input_shape = (1, 10235, 3072)

# Create the model
model = Sequential()
model.add(Bidirectional(LSTM(64, return_sequences = True, input_shape = input_shape)))
model.add(Dropout(0.5))
model.add(Dense(1, activation = 'sigmoid'))

# Try using different optimizers and different optimizer configs
model.compile('adam', 'binary_crossentropy', metrics = ['accuracy'])

# Fit the training set over the model and correct on the validation set
model.fit(inputs['X_train'], inputs['y_train'],
            batch_size = batch_size,
            epochs = epochs,
            validation_data = [inputs['X_validation'], inputs['y_validation']])

# Get score over the test set
return model.evaluate(inputs['X_test'], inputs['y_test'])

我目前遇到以下错误:

ValueError: Input 0 is incompatible with layer bidirectional_23: expected ndim=3, found ndim=2

我的训练数据(inputs['X_train'])的形状为(10235, 3072)

非常感谢!

1 个答案:

答案 0 :(得分:0)

我通过执行以下操作使其与答复的建议配合使用:

  1. 删除return_sequence = True;
  2. 将以下转换应用于X集:np.reshape(inputs[dataset], (inputs[dataset].shape[0], inputs[dataset].shape[1], 1))
  3. 将LSTM层的输入形状更改为(10235, 3072, 1)的形状X_train