Все входные массивы (x) должны иметь одинаковое количество выборок. Получил формы массива: [(52, 224, 224, 3), (64, 35)] - PullRequest
0 голосов
/ 20 октября 2019

Я получаю эту ошибку, и очень странно, что первая эпоха была завершена удовлетворительно, а размеры не совпадают во второй эпохе. All input arrays (x) should have the same number of samples. Got array shapes: [(52, 224, 224, 3), (64, 35)] см. Скриншот ошибки

Я впервые использую ImageDataGenerator () с методом flow_from_directory (), чтобы получить все изображения из набора данных. Это часть кода, где я думаю, что должна быть ошибка:

# generator function - two inputs (images and histogram vector) and one label (OCEAN labels)
def generator(dataset_path, OCEAN_histogram, batch_size):

    gen = ImageDataGenerator()
    gen_faces = gen.flow_from_directory(dataset_path,
                                          target_size = (224, 224),
                                          class_mode = None,
                                          batch_size = batch_size,
                                          shuffle=True)    


    batch_OCEAN = np.zeros((batch_size, 5))
    batch_histogram = np.zeros((batch_size, n_features))

    # loop where we continually feed the nn in batches
    while True:

    # it takes the next batch of images
    batch_faces = gen_faces.next()


    # list with all images names in the current batch
    all_faces = [f.rsplit('.', 1)[0].rsplit('/', 1)[1] for f in gen_faces.filenames]

    for i in range(batch_size):
        batch_OCEAN[i] = OCEAN_histogram[all_faces[i]][0]
        batch_histogram[i] = OCEAN_histogram[all_faces[i]][1]

    # shapes : batch_faces -> (64, 224, 224, 3)  batch_histogram -> (64, 35) batch_OCEAN -> (64, 5)
    yield [ batch_faces, batch_histogram ], batch_OCEAN


train_generator = generator(train_path, train_OCEAN_histogram, batch_size)
validation_generator = generator(validation_path, validation_OCEAN_histogram, batch_size)

# Train model on dataset
print("[INFO] training model...")
custom_vgg_model.fit_generator(train_generator, epochs = 50, steps_per_epoch = train_size//batch_size,
                               validation_data = validation_generator,
                               validation_steps = validation_size//batch_size, verbose = 1)

Как эта ошибка возможна? Любые идеи, пожалуйста?

Заранее спасибо!

1 Ответ

0 голосов
/ 21 октября 2019

Причина в том, что общее количество обучающих выборок составляет 55 796, а если размер вашей партии равен 64, у вас будет 871 шаг с 52 остатками. После 871 шага ваш генератор вернет вам тензор с формой (52, 224, 224, 3) во время следующей итерации.

Я бы посоветовал после каждой эпохи перемешивать набор данных и хранить только 55,796//64 выборок в вашем генераторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...