Неправильные размеры Conv2D с ImageDataGenerator - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь загрузить образы поездов из каталога, используя ImageDataGenerator, поэтому это выглядит так:

train_data_image_generator = ImageDataGenerator(
            rescale=0.02,
            shear_range=0.01,
            zoom_range=0.02,
            horizontal_flip=False
        )
        train_data_generator = train_data_image_generator.flow_from_directory(
            directory=train_data_dir,
            target_size=(self.img_height, self.img_width),
            batch_size=batch_size,
            class_mode='categorical',
            color_mode='rgb',
            shuffle=True
        )

        validation_data_image_generator = ImageDataGenerator(
            rescale=0.01,
            shear_range=0.05,
            zoom_range=0.05,
            horizontal_flip=False
        )

        validation_data_generator = validation_data_image_generator.flow_from_directory(
            directory=validation_data_dir,
            target_size=(self.img_height, self.img_width),
            batch_size=batch_size,
            class_mode='categorical',
            color_mode='rgb',
            shuffle=True
        )

        test_data_image_generator = ImageDataGenerator(
            rescale=0.02
        )

        test_data_generator = test_data_image_generator.flow_from_directory(
            directory=test_data_dir,
            target_size=(self.img_height, self.img_width),
            batch_size=batch_size,
            class_mode=None,
            color_mode='rgb',
            shuffle=False
        )

И похоже, что он работает успешно, потому что я вижу вывод в консоли: Found 26 images belonging to 26 classes.

Моя последовательная модель начинается так:

self.model.add(Conv2D(64, (3, 3), input_shape=input_shape, padding=conv2d_padding))
self.model.add(LeakyReLU(alpha=0.2))
...

Когда я подхожу к моей модели, я вижу результат:

 self.model.fit_generator(
            generator=train_data_generator,
            epochs=epochs,
            steps_per_epoch=train_step_size,
            validation_data=validation_data_generator,
            validation_steps=valid_step_size,
            callbacks=[self.early_stop]
        )

Выход:

enter image description here

Однако, когда я пытаюсь выполнить эту строку кода:

score = self.model.evaluate_generator(test_data_generator, steps=valid_step_size)

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

ValueError: Error when checking input: expected conv2d_1_input to have 4 dimensions, but got array with shape (53, 21, 3)

Что так странно, потому что я использовал один и тот же механизм для загрузки изображений повсюду, и он работает с данными поезда.

Есть ли у кого-нибудь идеи, что с этим может быть не так?

Благодарю за вашу помощь.

...