我发现很难理解 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 。
并且生成的图像中没有一个是具有相同超参数的随机图像。
只需对上述配置进行说明。
答案 0 :(得分:1)
您的计算似乎正确。另请注意,flow_from_directory
有一个shuffle
参数(默认为true)。这意味着生成器将在每个时期(batch_size
乘以steps_per_epoch
)产生992张图像,但是每个时期它们出现的顺序将有所不同。