我目前正在学习FrançoisChollet撰写的“使用Keras进行深度学习”中的Keras ImageDataGenerator执行数据增强。
我现在在训练数据集中有1000张(狗)和1000张(猫)图像。
我在验证数据集中也有500张(狗)和500张(猫)图像。
本书将生成器中的训练和验证数据的批次大小定义为32,以使用“ step_per_epoch”和“ epoch”两者进行数据扩充以拟合模型。
但是,当我训练模型时,我收到了Tensorflow警告,“您的输入数据已用完...”并停止了训练过程。
我在网上搜索过,很多解决方案都提到step_per_epoch应该是steps_per_epoch = len(train_dataset) // batch_size
&steps_per_epoch = len(validation_dataset) // batch_size
我了解上述逻辑,培训中没有警告。
但是我想知道,最初我有2000个训练样本。这太少了,因此我需要执行数据增强以增加训练图像的数量。如果steps_per_epoch = len(train_dataset) // batch_size
应用,则由于len(train_dataset)
仅是2000。不是不是我仍在使用2000个样本来训练模型,而不是向模型添加更多的增强图像?
train_datagen = ImageDataGenerator(
rescale=1./255,
rotation_range=40,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,)
test_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
train_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size=(150, 150),
batch_size=32,
class_mode='binary')
history = model.fit_generator(
train_generator,
steps_per_epoch=100,
epochs=100,
validation_data=validation_generator,
validation_steps=50)
imagedatagenerator不会增加训练集的大小这一事实。所有扩充都在内存中完成。因此,将原始图像随机扩充,然后返回其扩充版本。如果要查看增强图像,则需要为flow_from_directory函数设置以下参数:
save_to_dir=path,
save_prefix="",
save_format="png",
现在您有2000张图像,批处理大小为32,则每个时代将有2000 // 32 = 62步,但是您尝试的100步是导致错误的原因。如果要使用所有数据点,则应设置:
steps_per_epoch = len(train_dataset) // batch_size
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句