ValueError: Ошибка при проверке цели: ожидалось, что conv2d_21 будет иметь 4 измерения, но получил массив с формой (26, 1) - PullRequest
0 голосов
/ 26 сентября 2018

У меня есть изображения с формой (3600, 3600, 3).Я хотел бы использовать автоэнкодер на них.Мой код:

from keras.layers import Input, Dense, Conv2D, MaxPooling2D, UpSampling2D
from keras.models import Model
from keras import backend as K
from keras.preprocessing.image import ImageDataGenerator


input_img = Input(shape=(3600, 3600, 3))  

x = Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = MaxPooling2D((2, 2), padding='same')(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = MaxPooling2D((2, 2), padding='same')(x)



x = Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = UpSampling2D((2, 2))(x)
x = Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = UpSampling2D((2, 2))(x)
x = Conv2D(16, (3, 3), activation='relu')(x)
x = UpSampling2D((2, 2))(x)
decoded = Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)

autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')




batch_size=2


datagen = ImageDataGenerator(rescale=1. / 255)

# dimensions of our images.
img_width, img_height = 3600, 3600

train_data_dir = 'train'
validation_data_dir = validation




generator_train = datagen.flow_from_directory(
        train_data_dir,
        target_size=(img_width, img_height),
        )



generator_valid = datagen.flow_from_directory(
        validation_data_dir,
        target_size=(img_width, img_height),
        batch_size=batch_size,
        class_mode=None,
        shuffle=False)



autoencoder.fit_generator(generator=generator_train,
            validation_data = generator_valid,
            )

Когда я запускаю код, я получаю это сообщение об ошибке:

ValueError: Error when checking target: expected conv2d_21 to have 4 dimensions, but got array with shape (26, 1)

Я знаю, что проблема где-то в форме слоев, но я не могне могу найти это.Может кто-нибудь, пожалуйста, помогите мне и объясните решение?

1 Ответ

0 голосов
/ 26 сентября 2018

В вашем коде есть следующие проблемы:

  1. Передайте class_mode='input' в flow_from_directory метод для ввода входных изображений в качестве меток (так как вы создаете автоэнкодер).

  2. Передайте padding='same' на третий слой Conv2D в декодере:

    x = Conv2D(16, (3, 3), activation='relu', padding='same')(x)
    
  3. Используйте три фильтра в последнем слое с моментаизображения RGB:

    decoded = Conv2D(3, (3, 3), activation='sigmoid', padding='same')(x)
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...