Я пытаюсь создать LSTM с отслеживанием состояния с помощью Keras, и я не понимаю, как добавить слой встраивания перед запуском LSTM. Проблема, похоже, связана с флагом stateful
. Если моя сеть не отслеживает состояние, добавление слоя внедрения довольно просто и работает.
Рабочий LSTM с сохранением состояния без встраиваемого слоя выглядит на данный момент так:
model = Sequential()
model.add(LSTM(EMBEDDING_DIM,
batch_input_shape=(batchSize, longest_sequence, 1),
return_sequences=True,
stateful=True))
model.add(TimeDistributed(Dense(maximal_value)))
model.add(Activation('softmax'))
model.compile(...)
При добавлении слоя встраивания я перемещаю параметр batch_input_shape
в слой встраивания, т.е. только первый слой должен знать форму? Нравится:
model = Sequential()
model.add(Embedding(vocabSize+1, EMBEDDING_DIM,batch_input_shape=(batchSize, longest_sequence, 1),))
model.add(LSTM(EMBEDDING_DIM,
return_sequences=True,
stateful=True))
model.add(TimeDistributed(Dense(maximal_value)))
model.add(Activation('softmax'))
model.compile(...)
Известное мне исключение Exception: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
Так что я застрял здесь в данный момент. Каков трюк, чтобы объединить вложения слов в LSTM с отслеживанием состояния?