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

时间:2018-06-07 09:32:02

标签: python tensorflow keras deep-learning

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

1 个答案:

答案 0 :(得分:1)

将ImageDataGenerator和flow_from_directory用于训练集和验证集,也会增加验证数据。这显示在Keras documentation中,它在图像生成器方法下指出flow_from_directory:Takes data&标签数组,生成批量的增强数据。 如果您不想在验证集上使用数据扩充,可以查看提供的示例:

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

test_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 = test_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)