Привет, я пишу свои предложения здесь, потому что я пока не могу комментировать,
Вы правы, у функции fit_generator()
нет атрибута проверки валидации. Поэтому вам нужно создать свой собственный проверочный набор данных и передать его в генератор подгонки через validation_data=(val_X, val_y)
, например, например:
history = finetune_model.fit_generator(train_generator, epochs=NUM_EPOCHS, workers=8, validation_data=(val_X, val_y),
steps_per_epoch=steps_per_epoch,
shuffle=True, callbacks=callbacks_list)
Надеюсь, это поможет.
РЕДАКТИРОВАТЬ
Чтобы получить проверочный набор данных из ваших данных, вы можете использовать метод train_test_split()
из sklearn. Например, разделение с 77% данных поезда и 33% проверки:
X_train, val_X, y_train, val_y= train_test_split(
X, y, test_size=0.33, random_state=42)
Смотрите здесь для получения дополнительной информации.
В качестве альтернативы вы можете написать свой собственный метод разделения:)
Изменить 2
Если у вас нет возможности использовать train_test split, и предполагается, что у вас есть фрейм данных pandas с именем train_data
с функциями ипомечает вместе:
val_data=train_data.sample(frac=0.33,random_state=1)
Это должно создать набор данных для проверки с 33% данных и набор данных для поезда с 77% данных.
Edit3
Оказывается, вы используете ImageDataGenerator()
для создания своих данных. Это очень удобно, потому что вы можете установить процент проверки с помощью validation_split=
во время инициализации ImageDataGenerator (), как показано в документации ( здесь ). Это должно выглядеть примерно так:
train_datagen = ImageDataGenerator(preprocessing_function=preprocess_input,
validation_split=0.33)
После этого вам понадобятся два «сгенерированных» набора данных. Один для обучения и один для проверки. Это должно выглядеть следующим образом:
train_generator = train_datagen.flow_from_directory(TRAIN_DIR,
target_size=(HEIGHT, WIDTH),
batch_size=BATCH_SIZE,subset="training")
validation_generator = train_datagen.flow_from_directory(TRAIN_DIR,
target_size=(HEIGHT, WIDTH),
batch_size=BATCH_SIZE,subset="validation")
Наконец, вы можете использовать оба набора в своем fit_generator следующим образом:
history = finetune_model.fit_generator(train_generator,epochs=NUM_EPOCHS, workers=8,
validation_data=validation_generator, validation_steps = validation_generator.samples,steps_per_epoch=steps_per_epoch,
shuffle=True, callbacks=callbacks_list)
Дайте мне знать, если это решит вашу проблему:)