У меня проблема с классификацией текста, и я использую слой LSTM для получения векторов контекста, используя Keras.
Я использовал tokenizer
и дополнил последовательности, чтобы мой X_train
имел форму(21226, 1500)
где 1500 - максимальная длина последовательности.
Как напрямую передать эту последовательность в LSTM с 64 модулями?Я попытался сделать это напрямую, но, похоже, возникла проблема с размерами.
Вход 0 несовместим со слоем lstm_26: ожидаемый ndim = 3, найденный ndim = 2
Вот код в Керасе:
input = Input(shape=(1500,))
lstm1 = LSTM(units=64, dropout=0.2, recurrent_dropout=0.2)
out = lstm1(input)
Редактировать:
Вот обновленный код:
def getm():
inp = Input(shape=(1500,1))
lstm1 = LSTM(units=64, dropout=0.2, recurrent_dropout=0.2)
out = lstm1(inp)
model = Model(inputs=inp, outputs=out)
model.compile(optimizer='rmsprop', loss=custom_loss, metrics=[custom_loss])
return model
Теперь форма X_train (21226, 1500), после изменения с помощью np.expand_dims, это (21226, 1500, 1).
Я прочитал документы Keras и в форме X_train, первый атрибут должен быть размером пакета, который должен быть None, как KerasФункции прогнозирования и подбора позаботятся об этом.
EDIT2:
Вот полный код:
def getm():
inp = Input(shape=(1500,1))
lstm1 = LSTM(units=64, dropout=0.2, recurrent_dropout=0.2)
out = lstm1(inp)
model = Model(inputs=inp, outputs=out)
model.compile(optimizer='rmsprop', loss=custom_loss, metrics=[custom_loss])
return model
model = getm()
X_train.shape = (21226, 500)
Я изменяю это, используя
my_data = X_train.reshape(X_train.shape + (1,))
Теперь,
my_data.shape = (21226, 1500, 1)
Я пытаюсь предсказать вывод для одной точки данных:
model.predict(my_data[0])
И эта ошибка выдается:
ValueError: Error when checking input: expected input_25 to have 3 dimensions, but got array with shape (1500, 1)
EDIT3:
Это сводка модели
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_25 (InputLayer) (None, 1500, 1) 0
_________________________________________________________________
lstm_16 (LSTM) (None, 64) 16896
=================================================================
Total params: 16,896
Trainable params: 16,896
Non-trainable params: 0
_________________________________________________________________