Keras图像数据增强

时间:2019-01-29 06:13:16

标签: python keras deep-learning conv-neural-network

我发现很难理解 ImageDataGenerator flow_from_directory 的工作方式,我正在使用以下代码来增强CNN模型的图像数据,因为没有训练图像可用的更少。

batch_size = 16
from keras.preprocessing.image import ImageDataGenerator
train_transformed = 'dataset/train_transformed'
train_datagen = ImageDataGenerator(
    rescale=1./255,
    horizontal_flip=True,
    fill_mode='nearest')

train_generator = train_datagen.flow_from_directory(
    'dataset/train',
    target_size=(150, 150),
    batch_size=batch_size,
    class_mode='binary',
    save_to_dir=train_transformed,
    save_prefix='train_aug',
    save_format='png')

它是具有20个正像和20个负像的二进制分类问题。所以我有 dataset / train 文件夹,其中有2个子文件夹,每个子文件夹有20张图像。当我使用上述图像生成器训练模型时,我可以看到 4160 个图像保存在 dataset / train_transformed 文件夹中,并且假定 4160 个图像用于训练模型。

model.fit_generator(
    train_generator,
    steps_per_epoch=1000 // batch_size,
    epochs=5,
    validation_data=validation_generator,
    validation_steps=100 // batch_size)

根据我的理解, 每个时期的样本数= batch_size X steps_per_epoch
由于我的steps_per_epoch = 1000/16 = 62,
#每个纪元中的样本应为 62 x 16 = 992
历元数未设置为5,因此生成的图像总数应为 992 x 5 = 4960
并且生成的图像中没有一个是具有相同超参数的随机图像。
只需对上述配置进行说明。

1 个答案:

答案 0 :(得分:1)

您的计算似乎正确。另请注意,flow_from_directory有一个shuffle参数(默认为true)。这意味着生成器将在每个时期(batch_size乘以steps_per_epoch)产生992张图像,但是每个时期它们出现的顺序将有所不同。