Я пытаюсь модель автоэнкодера со слоями LSTM в Keras для обнаружения текстовых выбросов.Я закодировал каждое предложение в последовательность чисел, где каждое число представляет букву.
До сих пор я уже обучил модель с входом фиксированной длины, дополняя нули каждой из 4000 последовательностей доmaxlength = 40, таким образом, обучая модель с помощью массива [4000,40,1] ([batch_size, timesteps, features]).
Теперь мне интересно, как я могу использовать такую модель автоэнкодера без дополнения нулями докаждая последовательность (предложение), таким образом, обучается и предсказывает фактический размер каждого предложения (последовательности).
В настоящий момент я стандартизировал каждую последовательность, поэтому мои данные поезда (x_train) представляют собой список массивов и каждый массив всписок представляет собой стандартизированную последовательность чисел различной длины.
Для ввода этих данных в модель LSTM я пытаюсь преобразовать в трехмерный массив:
x_train=np.reshape(x_train, (len(x_train), 1, 1))
, не уверен, что это правильнохотя.
Моя модель выглядит следующим образом (я удалил параметр input_shape, чтобы модель могла принимать переменную длинуinput):
model = Sequential()
model.add(LSTM(20, activation='tanh',return_sequences=True))
model.add(LSTM(15, activation='tanh', return_sequences=True))
model.add(LSTM(5, activation='tanh', return_sequences=True))
model.add(LSTM(15, activation='tanh', return_sequences=True))
model.add(LSTM(20, activation='tanh', return_sequences=True))
model.add((Dense(1,activation='tanh')))
Затем при попытке скомпилировать и обучить модель
nb_epoch = 10
model.compile(optimizer='rmsprop', loss='mse')
checkpointer = ModelCheckpoint(filepath="text_model.h5",
verbose=0,
save_best_only=True)
es_callback = keras.callbacks.EarlyStopping(monitor='val_loss')
history = model.fit(x_train, x_train,
epochs=nb_epoch,
shuffle=True,
validation_data=(x_test, x_test),
verbose=0,
callbacks=[checkpointer,es_callback])
Я получаю сообщение об ошибке: «ValueError: установка элемента массива с последовательностью.»
Моя сводная модель выглядит следующим образом:
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
lstm_6 (LSTM) (None, 1, 20) 1760
_________________________________________________________________
lstm_7 (LSTM) (None, 1, 15) 2160
_________________________________________________________________
lstm_8 (LSTM) (None, 1, 5) 420
_________________________________________________________________
lstm_9 (LSTM) (None, 1, 15) 1260
_________________________________________________________________
lstm_10 (LSTM) (None, 1, 20) 2880
_________________________________________________________________
dense_2 (Dense) (None, 1, 1) 21
=================================================================
Total params: 8,501
Trainable params: 8,501
Non-trainable params: 0
_________________________________________________________________
Поэтому мой вопрос заключается в том, можно ли обучать и прогнозировать с помощью входной последовательности переменной длины в модели автоэнкодера LSTM.
И если моймыслительный процесс обнаружения текстовых выбросов с использованием такой модели архитектуры является правильным.