Обучайте и тестируйте разделенный набор с помощью ImageDataGenerator и потока

Пытаюсь сделать сеть с помощью аугментации.

Сначала я использую ImageDataGenerator с validation_split = 0.2.

train_generator = ImageDataGenerator(
    rotation_range=90,
    zoom_range=0.15,
    width_shift_range=0.2,
    height_shift_range=0.2,
    fill_mode="nearest",
    validation_split=0.2
)

Затем я попытался создать расширенные данные для обучения, а не данные для проверки. Мне нужно использовать flow вместо flow_from_directory.

train_augm = train_generator.flow([data_train, ebv_train], z_train, batch_size=128,subset='training')
valid_augm = train_generator.flow([data_train, ebv_train], z_train, batch_size=1,subset='validation')

Я получаю это сообщение об ошибке.

ValueError: Training and validation subsets have different number of classes after the split. If your numpy arrays are sorted by the label, you might want to shuffle them.

Что я делаю не так?

Код model.fit выглядит примерно так

training_history = model.fit(
    train_augm,
    steps_per_epoch= len(data_train)//128,
    epochs=10,
    validation_data=valid_augm    
)

person Thiago xavier rocha de souza    schedule 22.06.2020    source источник


Ответы (1)


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

Для случайного разделения вы можете взглянуть на библиотеку train_test_split.

person Nazmul Hasan    schedule 22.06.2020