Как совместить RNN с CNN? - PullRequest
       17

Как совместить RNN с CNN?

0 голосов
/ 22 октября 2018

Я пытаюсь объединить LSTM с CNN, но застрял из-за ошибки.Вот модель, которую я пытаюсь реализовать:

model=Sequential()
model.add(Conv2D(32, (3, 3), input_shape=(28, 28,3), activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(Conv2D(32, (3, 3), activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(32, activation='relu'))
model.add(LSTM(128, return_sequences=True,input_shape=(1,32), activation='relu'))
model.add(LSTM(256))
model.add(Dropout(0.25))
model.add(Dense(37))
model.compile(loss='categorical_crossentropy', optimizer='adam')

и ошибка происходит в первом слое LSTM:

ERROR: Input 0 is incompatible with layer lstm_12: expected ndim=3, found ndim=2

1 Ответ

0 голосов
/ 22 октября 2018

Вводом слоя LSTM должен быть трехмерный массив, представляющий последовательность или временной ряд (это то, что пытается сказать ошибка: expected ndim=3).Однако в вашей модели входной слой LSTM, который на самом деле является выходным сигналом плотного слоя перед ним, представляет собой двумерный массив (т. Е. found ndim=2).Чтобы превратить его в трехмерный массив формы (n_samples, n_timesteps, n_features), одним из решений является использование слоя RepeatVector, чтобы повторить его столько раз, сколько шагов (которые вы должны указать в своем коде):

model.add(Dense(32, activation='relu'))
model.add(RepeatVector(n_timesteps))
model.add(LSTM(128, return_sequences=True, input_shape=(n_timesteps,32), activation='relu'))
...