Я пытаюсь использовать автоэнкодер в Keras для неконтролируемой классификации гиперспектральных изображений с использованием набора данных Indian Pines. Я начал с проекта здесь https://github.com/KonstantinosF/Classification-of-Hyperspectral-Image и изменили раздел в TrainTheModel.ipynb, заменив раздел " Обучить модель " (и следующие два блока кода) следующим кодом, который является лишь кодирующей стороной автоэнкодера:
input_img = Input(shape=input_shape) # input_shape is (30, 5, 5)
x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img) # x1
x = MaxPooling2D((2, 2), padding='same')(x) # x2
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) # x3
x = MaxPooling2D((2, 2), padding='same')(x) # x4
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x) #x5
encoded = MaxPooling2D((2, 2), padding='same')(x)
model = Model(input_img, encoded)
model.compile(optimizer='adadelta', loss='binary_crossentropy')
model.fit(X_train, y_train, batch_size=32, epochs=15)
который я адаптировал из раздела "Сверточный автоэнкодер" в https://blog.keras.io/building-autoencoders-in-keras.html. Когда я пытаюсь запустить команду:
model.fit(X_train, y_train, batch_size=32, epochs=15)
команду, я получаю сообщение об ошибке:
ValueError: Error when checking target: expected max_pooling2d_25 to have 4 dimensions, but got array with shape (29685, 16)
Поскольку я новичок в CNN, я не уверен, почему мои размеры не соответствуют действительности. Если я распечатаю здесь форму каждого шага, я получу:
(?, 16, 5, 5) # x1
(?, 16, 3, 3) # x2
(?, 8, 3, 3) # x3
(?, 8, 2, 2) # x4
(?, 8, 2, 2) # x5
(?, 8, 1, 1) # encoded
Любые идеи?