Проблемы с формой ImageDataGenerator в Керасе - PullRequest
0 голосов
/ 14 марта 2019
datagen = ImageDataGenerator(
            featurewise_center=False,  # set input mean to 0 over the dataset
            samplewise_center=False,  # set each sample mean to 0
            featurewise_std_normalization=False,  # divide inputs by std of the dataset
            samplewise_std_normalization=False,  # divide each input by its std
            zca_whitening=False,  # apply ZCA whitening
            rotation_range=15,  # randomly rotate images in the range (degrees, 0 to 180)
            width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
            height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
            horizontal_flip=True,  # randomly flip images
            vertical_flip=False)  # randomly flip images
        # (std, mean, and principal components if ZCA whitening is applied).
        # datagen.fit(x_train)


        print(x_train.shape)

        def data_generator(generator, x, y1, y2, batch_size):
            genX = generator.flow(x, seed=7, batch_size=batch_size)
            genY1 = generator.flow(y1, seed=7, batch_size=batch_size)
            genY2 = generator.flow(y2, seed=7, batch_size=batch_size)
            while(True):
                Xi = genX.next()
                Yi1 = genY1.next()
                Yi2 = genY2.next()
                yield Xi, [Yi1, Yi2]

И вот как я называю model.fit_generator

model.fit_generator(data_generator(datagen, x_train, y_train, y_aux_train, params['batch_size']),
                            epochs=params['epochs'], steps_per_epoch=150,
                            validation_data=data_generator(datagen, x_test, y_test, y_aux_test, params['batch_size']), 
                            validation_steps=100, callbacks=[reduce_lr, tensorboard],verbose=2)

Это ошибка, которую я получаю -

ValueError: ('Входные данные в NumpyArrayIterator должны иметь ранг 4. Вы передали массив с формой ', (5630, 4))

1 Ответ

0 голосов
/ 14 марта 2019

Какие у вас x, y1 и y2? Входные данные в ImageDataGenerator должны иметь 4 измерения (пакет, канал, высота, ширина). Ваши данные - это нечто совершенно другое, поэтому вы получаете сообщение об ошибке.

UPDATE:

Согласно документам :

flow(x, y=None, batch_size=32, shuffle=True, sample_weight=None, seed=None, save_to_dir=None, save_prefix='', save_format='png', subset=None)

x: входные данные. Numpy массив ранга 4 или кортеж. Если кортеж, первый элемент должен содержать изображения, а второй элемент еще один клочок массив или список пустых массивов, которые передаются на выход без любые модификации. Может использоваться для подачи разных данных модели вместе с изображениями.

В genY1 = generator.flow(y1, seed=7, batch_size=batch_size) вы передаете свои метки (которые, как я вижу, (4,)) как объекты, и ImageDataGenerator ожидает, что они будут иметь 4 измерения.

Вы не должны передавать свои ярлыки вот так. Попробуйте вместо этого что-то вроде этого:

datagen.flow((x_train, [y_train, y_aux_train]), batch_size=params['batch_size'])

Или:

datagen.flow(x=x_train, y=[y_train, y_aux_train], batch_size=params['batch_size'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...