【问题标题】:Avoid data augmentation on validation set when splitting training set dynamically动态拆分训练集时避免验证集上的数据扩充
【发布时间】:2020-11-12 01:46:04
【问题描述】:

您好,我有一个 jpg 图像数据集,我正在使用 Keras 和 Tensorflow。 我的数据集有 2 个子目录:trainingtest。 我想在 validation 部分中动态拆分我的 training。 我已经看到ImageDataGenerator 有一个名为validation_split 的方法。 我的问题是我也想应用数据增强,但只适用于剩余的 training 部分。

这是代码(它还在验证部分应用数据扩充)

apply_data_augmentation = True

if apply_data_augmentation:
  train_data_gen = ImageDataGenerator(rotation_range=10,
                                      width_shift_range=10,
                                      height_shift_range=10,
                                      zoom_range=0.3,
                                      horizontal_flip=True,
                                      vertical_flip=True,
                                      fill_mode='constant',
                                      cval=0,
                                      shear_range=0.2,
                                      rescale=1./255,
                                      validation_split=0.2)#means 20% of training is splitted dinamically into validation
else:
  train_data_gen = ImageDataGenerator(rescale=1./255,
                                      validation_split=0.2)
  
train_gen = train_data_gen.flow_from_directory(training_dir,
                                               target_size=(image_h, image_w),
                                               batch_size=bs,
                                               subset='training',
                                               class_mode='categorical',
                                               shuffle=True,
                                               classes=['NO_MASK','ALL_MASK','SOME_MASK'],
                                               seed=SEED,
                                               color_mode="rgb")

valid_data_gen = ImageDataGenerator(rescale=1./255)

valid_gen = train_data_gen.flow_from_directory(validation_dir,
                                               target_size=(image_h, image_w),
                                               batch_size=bs,
                                               subset='validation',
                                               class_mode='categorical',
                                               shuffle=True,
                                               classes=['NO_MASK','ALL_MASK','SOME_MASK'],
                                               seed=SEED,
                                               color_mode="rgb")

谢谢。

【问题讨论】:

    标签: python-3.x tensorflow keras


    【解决方案1】:

    我很困惑,你们有单独的培训和验证目录吗?如果您这样做,则创建两个单独的生成器用于训练和验证。

    valid_gen = ImageDataGenerator(rescale=1/255).flow_from_directory(validation_dir,                                               
                                                   target_size=(image_h, image_w),
                                                   batch_size=bs,
                                                   subset=None
                                                   class_mode='categorical',
                                                   shuffle=False,
                                                   classes=['NO_MASK','ALL_MASK','SOME_MASK'],
                                                   seed=SEED,
                                                   color_mode="rgb")
    

    删除 train_data_gen 中的验证拆分参数。如果您所有的图像都在训练目录中,那么对于 valid_gen 使用下面的代码。

    valid_gen = ImageDataGenerator(rescale=1/255, 
                                   validation_split=0.2).flow_from_directory(training_dir,
                                                   target_size=(image_h, image_w),
                                                   batch_size=bs,
                                                   subset='validation',
                                                   class_mode='categorical',
                                                   shuffle=False,
                                                   classes=['NO_MASK','ALL_MASK','SOME_MASK'],
                                                   seed=SEED,
                                                   color_mode="rgb")
    

    对于 train_gen,请使用您拥有的代码。确保在第二种情况下,您在 train_gen 和 valid_gen 中使用相同的种子值。为了验证,最好设置 shuffle=False 这样相同的图像 每个 epoch 的验证使用相同的顺序。

    【讨论】:

    • 不,我没有单独的培训和验证目录。我只有培训目录,我想动态创建验证数据(使用 ImageDataGenerator 中的 validation_split 方法)
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 2019-05-01
    • 2016-09-13
    • 1970-01-01
    • 2020-10-01
    • 2019-04-22
    • 2013-09-27
    • 2021-01-19
    相关资源
    最近更新 更多