Есть ли способ объединить слои Conv2D с LSTM? - PullRequest
0 голосов
/ 22 марта 2019

Я настраиваю модель keras со слоями Conv2D и LSTM и пробую следующий код ... Я пытаюсь не изменять форму слоя LSTM, но также выдает ошибку, что индекс находится вне диапазона. Я много искал, но я не мог понять, где проблема или как ее исправить Изображения, которые являются входом для модели CNN: 128 * 128

Я обновил свой код

num_steps = 50
lats = 128
lons = 128
features = 4
out_feats = 3

model = Sequential()
model.add(TimeDistributed(Conv2D(16, (3, 3), activation='relu', padding='same'), 
                          input_shape=(1,128, 128, 3)))

model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Conv2D(32, (3, 3), activation='relu', padding='same')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Conv2D(32, (3, 3), activation='relu', padding='same')))
model.add(TimeDistributed(MaxPooling2D(pool_size=(2, 2))))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(units=64, return_sequences=True))
model.add(TimeDistributed(Reshape((8, 8, 1))))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(32, (3,3), activation='relu', padding='same')))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(32, (3,3), activation='relu', padding='same')))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(16, (3,3), activation='relu', padding='same')))
model.add(TimeDistributed(UpSampling2D((2,2))))
model.add(TimeDistributed(Conv2D(out_feats, (3,3), padding='same')))
model.compile(optimizer='adadelta', loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()

X_data = np.array(X_data)
X_datatest = np.array(X_datatest)

hist=model.fit(X_data, X_data,epochs=15,batch_size=128,verbose = 2,validation_data=(X_datatest, X_datatest))

но это дает мне следующую ошибку

Traceback (последний вызов был последним): File «C: \ Users \ bdyssm \ Desktop \ Master \ LSTMCNN2.py», строка 107, в Файл hist = model.fit (X_data, X_data, epochs = 15, batch_size = 128, verbose = 2, validation_data = (X_datatest, X_datatest)) "C: \ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ Lib \ сайт-пакеты \ keras \ двигатель \ training.py", линия 952, в форме batch_size = batch_size) Файл "C: \ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ engine \ training.py", строка 751, в _standardize_user_data exception_prefix = 'input') Файл "C: \ Users \ bdyssm \ AppData \ Local \ Programs \ Python \ Python35 \ lib \ site-packages \ keras \ engine \ training_utils.py", строка 128, в standardize_input_data 'with shape' + str (data_shape)) ValueError: Ошибка при проверке ввода: ожидалось, что time_distributed_1_input будет иметь 5 измерений, но получено массив с формой (2892, 128, 128, 3)

Это сводка модели enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...