在Keras“ImageDataGenerator”中,“validation_split”参数是一种K折交叉验证吗?

Beh*_*rit 2 python cross-validation keras

我正在尝试对 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)
Run Code Online (Sandbox Code Playgroud)

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

Chr*_*ris 5

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

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

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

如果您想进行 k 交叉验证,则必须手动进行。这是一个很好的起点:Evaluate the Performance of Deep Learning Models in Keras