我在Keras使用ImageDataGenerator
和flow_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,...)
答案 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)