使用 ImageDataGenerator 和 flow_from_directory 时,Keras 中的数据增强是否应用于验证集

sid*_*t28 12 python deep-learning keras tensorflow

我使用的训练深层神经网络ImageDataGenerator,并flow_from_directory在Keras。数据在一个文件夹中。因此,我在validation_split=0.x使用ImageDataGenerator. 然后我创建了两个流程,一个用于训练,另一个用于分别使用flow_from_directorywithsubset="training"和进行验证subset="validation"

我想知道在创建时是否有任何指定的图像增强(转换)ImageDataGenerator适用于训练和验证子集或仅适用于训练子集。

我在 GitHub 的 Keras 存储库中找不到正确的部分来检查它。

(注意:我知道使用两个单独的生成器来训练和验证两个单独的目录是更好的做法)

代码示例:

img_gen = ImageDataGenerator(validation_split=0.2,horizontal_flip = True, vertical_flip = True,...)
train_flow = img_gen.flow_from_directory('directory',subset = "training",...)
validation_flow = img_gen.flow_from_directory('directory',subset = "validation",...)
history=model.fit_generator(generator = train_flow ,validation_data = validation_flow,...)
Run Code Online (Sandbox Code Playgroud)

mgr*_*oss 3

对训练集和验证集使用 ImageDataGenerator 和 flow_from_directory 也将增强验证数据。Keras 文档中对此进行了说明,其中在图像生成器方法 flow_from_directory 下进行了说明:获取数据和标签数组,生成批量的增强数据。如果您不想在验证集上使用数据增强,可以查看提供的示例:

train_datagen = ImageDataGenerator(
        rescale=1./255,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True)

validation_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        'data/train',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

validation_generator = validation_datagen.flow_from_directory(
        'data/validation',
        target_size=(150, 150),
        batch_size=32,
        class_mode='binary')

model.fit_generator(
        train_generator,
        steps_per_epoch=2000,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=800)
Run Code Online (Sandbox Code Playgroud)

注意:在这种情况下,您也可以直接传递重新缩放的验证数据,而不使用生成器,例如: validation_data=(x_valid, y_valid)

  • 那么您必须手动创建验证拆分吗?这使得“validation_split”在这种情况下毫无用处,对吧? (4认同)
  • 提问者提到他没有将训练数据和验证数据放在单独的目录中,因此该解决方案不起作用。此外,文档没有明确指定增强是否必须适用于验证子集。 (2认同)