Как подготовить 2D-форму для Bi-LSTM в Керасе - PullRequest
0 голосов
/ 20 мая 2019

У меня есть двумерная матрица (из DataFrame) уже сжатых векторов слов (я использовал технику максимального пула, я пытаюсь сравнить logres с подходом bi-LSTM), и я не уверен, как подготовить его к использованию в модели керас.

Мне известно о необходимости использования 3D-тензора для модели Bi-LSTM, и я пробовал решения для поиска в Google, но не смог найти работающее решение.

Это то, что у меня сейчас есть:

# 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 голосов
/ 20 мая 2019

Я заставил его работать с предложением ответа, выполнив следующее:

  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.
...