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

标签 python tensorflow keras deep-learning

我正在 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,...)

最佳答案

将 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)

关于python - 使用 ImageDataGenerator 和 flow_from_directory 时,Keras 中的数据增强是否应用于验证集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50737814/

相关文章:

python - 如何将 Azure 备份报告“持续时间”列转换为带小数的日期时间

tensorflow - 如何在 NER 上使波斯语的 spacy 训练更快

python - 如何使用 tensorflow 在 C++ 中训练模型?

python - 如何在 Keras 序列模型中提取偏差权重?

python - Keras ImageDataGenerator 用于在单独的目录中使用图像和蒙版进行分割

python - 无需替换的选择 - 通过改变列表

python - 从 Python 字典键创建变量

python - 检查输入 : expected flatten_input to have 3 dimensions, 但获得形状为 (None, 100, 100, 1) 的数组时出错

python - 尝试理解 model.predict 的输出

Python异常回溯告诉我行在哪里结束,从哪里开始?