Сверточный рекуррентный автоэнкодер Keras, ожидаемые 5 измерений, получил массив с ошибкой 4 измерений - PullRequest
0 голосов
/ 27 октября 2018

Я пытаюсь создать сверточный рекуррентный автоэнкодер, как показано в этом документе на стр. 5. Для шумоподавления изображения. Входными данными являются кадры 1080 на 1920 с RGB.

https://research.nvidia.com/sites/default/files/publications/dnn_denoise_author.pdf][1]

У меня есть несколько вопросов. При выполнении кода ниже я получаю одну ошибку: Ожидается, что input_1 будет иметь 5 измерений, но получит массив с формой (2, 1080, 1920, 3) первый - это количество кадров, 2-й и 3-й размеры и 4-й элемент - каналы Каким будет 5-й элемент?

Я использую генераторы для разбора данных:

train_datagen = ImageDataGenerator(
        rescale=1./255,
        )

generator_train = train_datagen.flow_from_directory(
        train_data_dir,
        target_size=(1080,1920), 
        batch_size=batch_size,
        class_mode=classification_type,
        shuffle=True)

autoencoder.fit_generator(generator_train, epochs=1, steps_per_epoch=number_samples_train//batch_size, shuffle=True,
                validation_data=generator_validation, verbose=1)

Как я могу добавить 5-й предмет с генераторами?

Модель выглядит так

input_img = Input(shape=(None,1080,1920,3))  

a = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True)(input_img)
a = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True )(a)

b = MaxPooling3D((2,2,2), padding='same')(a)


c = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True)(b)
c = ConvLSTM2D(32, (3, 3), activation='relu', padding='same',return_sequences=True)(c)

encoded = MaxPooling3D((2,2,2), padding='same')(c)




d = ConvLSTM2D(32, (3, 3), activation='relu', padding='same',return_sequences=True )(encoded)
d = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True)(d)

e= UpSampling3D((2, 2,2))(d)

#Skip connection
merge_one = concatenate([b, e])


f = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True) (merge_one)#(e)
f = ConvLSTM2D(32, (3, 3), activation='relu', padding='same', return_sequences=True) (f)#(e)

g = UpSampling3D((2, 2,2))(f)    
decoded = Conv3D(3, (3, 3, 3), activation='sigmoid', padding='same')(g)# (merge_two)

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