嗨,我有一个jpg图像数据集,我在Tensorflow中使用Keras。
我的数据集有2个子目录: training 和 test 。
我想在 validation 部分中动态拆分我的 training 。
我已经看到ImageDataGenerator
有一个名为validation_split
的方法。
我的问题是我也想仅在其余的 training 部分上应用数据增强。
这是代码(它还在 validation 部分应用数据增强)
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")
谢谢。
答案 0 :(得分:-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 = 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设置为相同的图像 在每个时期使用相同的顺序进行验证。