Есть ли способ сделать входные каналы в Python равными размерности фильтров? - PullRequest
0 голосов
/ 24 марта 2019

Моя проблема здесь в том, что я хочу сделать количество входных каналов в python равным размеру фильтров

Я уже пытался изменить форму, но это дает мне ту же ошибку .. и, поскольку я новичок в Python, я не мог понять, как исправить мою ошибку Моя модель предназначена для комбинирования cnn со слоем lstm, и у меня есть 2892 тренировочных изображения и 1896 тестовых изображений с общим количеством изображений 4788 каждое с размером 128 * 128

вот код того, что я пробовал

cnn_model = Sequential()

cnn_model.add(Conv2D(32, (3, 3), activation='relu', input_shape=(128,128,3)))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(32, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(64, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))

cnn_model.add(Conv2D(128, (3, 3), activation='relu'))
cnn_model.add(MaxPooling2D(pool_size=(2, 2)))
cnn_model.add(Flatten())

model = Sequential()
model.add(TimeDistributed(cnn_model, input_shape=(1,128, 128,3)))
model.add(LSTM(16, return_sequences=True, dropout=0.5))
model.add(Dense(1, activation='softmax'))
model.compile(optimizer='adadelta', loss='categorical_crossentropy', metrics=['accuracy'])

X_data = np.array(X_data)
X_datatest = np.array(X_datatest)
X_data= X_data.astype('float32') / 255.
X_datatest = X_datatest.astype('float32') / 255.


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», строка 219, в Файл 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, 28, 28, 3)

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

Это сводка cnn_model

enter image description here

1 Ответ

1 голос
/ 24 марта 2019

Проблема в том, что ваш cnn_model изменил форму вашего сигнала, чтобы иметь 128 каналов вместо 3 цветных каналов, но вы не учитываете это при объявлении формы ввода model.

Изучите форму вывода cnn_model с помощью cnn_model.summary() и убедитесь, что форма ввода model равна форме вывода cnn_model.

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