ValueError при обучении автоэнкодера в Keras для неконтролируемого обучения

Я пытаюсь использовать автоэнкодер в 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

Любые идеи?


person Wes    schedule 31.01.2018    source источник


Ответы (1)


Из вашей ошибки я предполагаю, что ваша сеть ожидает данные формы input_shape = (num, x, z, z), но вместо этого она получает данные формы (29685, 16).

Проверьте свою форму X_train, y_train

(также будьте осторожны с вашим image_data_format, будь то channels_last или channels_first

person Ioannis Nasios    schedule 01.02.2018