Я пытаюсь создать LSTM с сохранением состояния с Keras, и я не понимаю, как добавить слой внедрения до запуска LSTM. Проблема заключается в том, что флаг stateful
. Если моя сеть не сглажена, добавление слоя внедрения довольно прямолинейно и работает.Stateful LSTM with Embedding Layer (формы не совпадают)
рабочее с сохранением состояния 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 с состоянием?
Как вы определяете embedding_size или узнаете размер встроенных векторов? – naisanza
@naisanza Значение embedding_size является гиперпараметром. Это означает, что embedding_size зависит от вашей проблемы, и вы можете выбрать ее. К сожалению, я не могу дать вам общий ответ о том, как выбрать хорошие гиперпараметры, но https://arxiv.org/pdf/1206.5533.pdf дает хорошее начало по этой теме. – bruThaler