尝试将k倍交叉验证应用于ImageDataGenerator()。flow_from_directory

时间:2019-06-29 05:49:09

标签: keras cross-validation

我尝试将k倍交叉验证应用于cnn分类问题

假设我有一个carA,carB

所以我制作了子文件夹

  

car / trainCross / fold0
car / trainCross / fold1

     

car / validCross / fold0
car / validCross / fold1

和以下代码

model_path = '../carPrediction/model/'+ 'saved.hdf5'
for i in range(2):
    print('training->',i,' split')
    train_generator = train_datagen.flow_from_directory(TRAIN_CROPPED_PATH +'fold'+str(i),
                                                                 target_size=(image_size, image_size),
                                                                batch_size=batch_size,
                                                                class_mode='categorical',
                                                                seed=2019,
                                                                color_mode='rgb')
    print(VALID_CROPPED_PATH+'fold'+str(i))
    validation_generator = valid_datagen.flow_from_directory(
                                                        VALID_CROPPED_PATH+'fold'+str(i),
                                                        target_size=(image_size,image_size),
                                                        batch_size=batch_size,
                                                        class_mode='categorical',
                                                        seed=2019,
                                                        color_mode='rgb'
                                                    )
    test_generator = test_datagen.flow_from_dataframe(
    dataframe=df_test,
                                                        directory=TEST_CROPPED_PATH,
                                                        x_col='img_file',
                                                        y_col=None,
                                                        target_size= (image_size,image_size),
                                                        color_mode='rgb',
                                                        class_mode=None,
                                                        batch_size=batch_size,
                                                        shuffle=False
                                                    )
    try: 
        model = load_model(model_path, compile=True)
    except Exception as OSError:
        pass

    patient = 2
    callbacks1 = [
    EarlyStopping(monitor='val_loss', patience=patient, mode='min', verbose=1),
    ReduceLROnPlateau(monitor = 'val_loss', factor = 0.5, patience = patient / 2, min_lr=0.00001, verbose=1, mode='min'),
    ModelCheckpoint(filepath=model_path, monitor='val_loss', verbose=1, save_best_only=True, mode='min'),
    ]

    history = model.fit_generator(
    train_generator,
    steps_per_epoch=get_steps(nb_train_sample, batch_size),
    epochs=2,
    validation_data=validation_generator,
    validation_steps=get_steps(nb_validation_sample, batch_size),
    verbose=1,
    callbacks = callbacks1
)

但不确定这种方式是否正确 有什么想法吗?

0 个答案:

没有答案