首页 > 解决方案 > 在 Keras“ImageDataGenerator”中,“validation_split”参数是一种 K 折交叉验证吗?

问题描述

我正在尝试对 Keras 模型进行 K 折交叉验证(使用 ImageDataGenerator 和 flow_from_directory 进行训练和验证数据),我想知道“ImageDataGenerator”中的参数“validation_split”是否

    test_datagen = ImageDataGenerator(
    rescale=1. / 255,
    rotation_range = 180,
    width_shift_range = 0.2,
    height_shift_range = 0.2,
    brightness_range = (0.8, 1.2),
    shear_range = 0.2,
    zoom_range = 0.2,
    horizontal_flip = True,
    vertical_flip = True,
    validation_split = 0.1

)

train_datagen = ImageDataGenerator(
    rotation_range = 180,
    width_shift_range = 0.2,
    height_shift_range = 0.2,
    brightness_range = (0.8, 1.2),
    rescale = 1. / 255,
    shear_range = 0.2,
    zoom_range = 0.2,
    horizontal_flip = True,
    vertical_flip = True,
    validation_split = 0.1
)

train_generator = train_datagen.flow_from_directory(
    train_data_dir,
    target_size = (img_width, img_height),
    batch_size = batch_size,
    class_mode ='binary',
    seed = 42
)

validation_generator = test_datagen.flow_from_directory(
    validation_data_dir,
    target_size = (img_width, img_height),
    batch_size = batch_size,
    class_mode = 'binary',
    seed = 42
)

history = model.fit_generator(
    train_generator,
    steps_per_epoch = nb_train_samples // batch_size,
    epochs = epochs,
    validation_data = validation_generator,
    validation_steps = nb_validation_samples // batch_size)

“validation_split = 0.1”是否意味着我已经对我的数据集进行了 10 倍交叉验证?

标签: pythonkerascross-validation

解决方案


不,它只进行一次验证。来自官方文档

validation_split:在 0 和 1 之间浮动。要用作验证数据的训练数据的一部分。该模型将分离这部分训练数据,不会对其进行训练,并将在每个 epoch 结束时评估该数据的损失和任何模型指标。在改组之前,从提供的 x 和 y 数据中的最后一个样本中选择验证数据。

因此,将其设置为validation_split=0.1简单地保留最后 10% 的数据免于训练,并将其用作验证集。

如果要进行 k 交叉验证,则必须手动进行。这是一个很好的起点:评估 Keras 中深度学习模型的性能


推荐阅读