Реализация LSTM и CNN для последовательности изображений

avatar
mishaC
8 августа 2021 в 21:03
54
0
0

Я пытаюсь реализовать сеть CNN + LSTM, чтобы иметь возможность предсказывать класс на основе последовательности изображений. Моя форма X-train (2560, 250, 250, 3). Размер изображений составляет 250.250.3, и каждая последовательность изображений включает 256 изображений (таким образом, у меня есть 10 последовательностей изображений). Я определил временные шаги равными 256, каналы (функции) равными 3. Это часть моего кода:

X_data = np.reshape(X_data, (2560, 250, 250, 3))
Y_data = np.reshape(Y_data, (2560, 1))

model = tf.keras.models.Sequential()
model.add(TimeDistributed(Conv2D(filters=64, kernel_size=3, activation='relu'), input_shape=(None, 250, 250,3)))
model.add(TimeDistributed(Conv2D(filters=64, kernel_size=3, activation='relu')))
model.add(TimeDistributed(Dropout(0.5)))
model.add(TimeDistributed(MaxPool2D(pool_size=2)))
model.add(TimeDistributed(Flatten()))
model.add(LSTM(100))
model.add(Dropout(0.5))
model.add(Dense(100, activation='relu'))
model.add(Dense(3, activation='softmax'))
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

model.fit(X_data, Y_data, verbose=1, epochs=epochs, callbacks=callbacks)

И я получаю эту ошибку:

ValueError: Input 0 of layer sequential is incompatible with the layer: expected ndim=5, found ndim=4. Full shape received: (32, 250, 250, 3)

Когда я использую input_shape=(None, 256, 250, 250,3), я получаю следующую ошибку:

ValueError: Input 0 of layer max_pooling2d is incompatible with the layer: expected ndim=4, found ndim=5. Full shape received: (None, 256, 246, 246, 64)

В чем проблема с input_shape и как я могу дать сети желаемый ввод()

Источник
simpleApp
8 августа 2021 в 22:29
0

для отладки, пожалуйста, предоставьте код и источник данных для «X_data».

Shubham Panchal
9 августа 2021 в 01:17
0

Вы должны иметь ось времени в X_data. Форма должна быть похожа на ( num_samples , time_steps , W , H , C ).

mishaC
9 августа 2021 в 22:15
0

Я также пробовал X_data = np.reshape(X_data, (10, 256, 250, 250, 3)) но снова получаю ошибку в неправильной форме ввода.

mishaC
9 августа 2021 в 22:16
0

X_data — это массив NumPy, состоящий из фрагментов изображения размером (250, 250, 3). Количество всех изображений составляет 2560, которые я хочу разделить на 10 последовательностей.

Ответы (0)