Генератор не распознается при передаче данных проверки в .fit в Keras Sequential - PullRequest
1 голос
/ 25 сентября 2019

Точная ошибка:

ValueError: При передаче validation_data он должен содержать 2 (x_val, y_val) или 3 (x_val, y_val, val_sample_weights) элемента, однако он содержит 39 элементов

Я буквально не могу найти эту ошибку нигде, кроме исходного кода.

model.fit(  train_x
            , train_y
            , epochs=1
            , validation_data=validation_data_flow
            , callbacks=[checkpointer]
        )

validation_data является DirectoryIterator, автор flow_from_directory

validation_data_flow = ImageDataGenerator().flow_from_directory(
        validation_data_dir,
        target_size = (img_width, img_height),
        batch_size = batch_size,
        class_mode = 'categorical')

Ответы [ 2 ]

1 голос
/ 25 сентября 2019

Не совсем верно, что вы должны тренироваться и проверять одни и те же данные, такие как массив или генератор, но вы не можете сделать это с помощью одной и той же функции.

Вы можете тренироваться в своем массивеи выполнить проверку на вашем генераторе, но для этого потребуется 2 разных вызова функций, и это означает, что вы не получите метрики проверки после каждой эпохи, если вы используете несколько эпох.Вы можете обойти это, с чем-то вроде:

for i in range(epochs):
    model.fit(train_x, train_y, epochs=1, callbacks=[checkpointer])
    loss = model.evaluate_generator(validation_data_flow)

    print("Validation loss for epoch %s was %s" % (i, loss))
0 голосов
/ 25 сентября 2019

Данные проверки и обучения должны быть одного типа, либо оба генератора, либо оба ndarrays.Чтобы это исправить, вам нужно преобразовать один тип в другой.Посмотрите на этот ответ, чтобы узнать, как преобразовать генератор в ndarray.Чтобы преобразовать ndarray в генератор, используйте ImageDataGenerator.flow().

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