【问题标题】:Is data augmentation in Keras applied to the validation set when using ImageDataGenerator and flow_from_directory使用 ImageDataGenerator 和 flow_from_directory 时,Keras 中的数据增强是否应用于验证集
【发布时间】:2018-11-17 04:00:59
【问题描述】:

我正在 Keras 中使用 ImageDataGeneratorflow_from_directory 训练深度神经网络。数据在一个文件夹中。因此,我在使用ImageDataGenerator 创建生成器时使用validation_split=0.x。然后我创建了两个流,一个用于训练,一个用于验证,分别使用 flow_from_directorysubset="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,...)

【问题讨论】:

    标签: python tensorflow keras deep-learning


    【解决方案1】:

    将 ImageDataGenerator 和 flow_from_directory 用于训练和验证集,也将增加验证数据。这在Keras documentation 中显示,它在图像生成器方法 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)
    

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

    【讨论】:

    • 感谢@mgross,但对于ImageDataGenerator 中的validation_split 新功能,文档并不清楚,它没有明确说明转换是否同时应用于训练和验证子集.这就是为什么我试图在 GitHub 的 Keras 存储库中找到实现
    • @sidrat28:你检查image.py了吗?我认为这证实了数据增强既适用于验证集,也适用于您在代码示例中使用它的训练集,因为这两个子集的处理方式相同。
    • 将测试和验证用作同义词可能会令人困惑,我会坚持使用validation_datagenvalidation_generator 并为您的盲数据保留“测试”。
    • 所以您必须手动创建验证拆分?这使得validation_split 在这种情况下毫无用处,对吧?
    • 提问者提到他在不同的目录中没有训练和验证数据,所以这个解决方案不起作用。此外,文档没有明确指定扩充是否一定适用于验证子集。
    猜你喜欢
    • 2021-09-30
    • 2018-03-05
    • 1970-01-01
    • 2017-04-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 2021-04-16
    • 2022-01-21
    相关资源
    最近更新 更多