我目前正在学习如何使用Keras ImageDataGenerator执行数据增强,来源于François Chollet的 "Deep learning with Keras"。
我现在在训练数据集中有1000张狗和1000张猫的图片。
我还有500条狗和500条猫的图片在验证数据集中。
该书将批量大小(batch size)定义为生成器中用于数据增强时的"step_per_epoch"和"epoch"的值,对于训练和验证数据集都是32。
然而,在我训练模型时,我收到了Tensorflow 警告:"Your input ran out of data..."(你的输入已经没有更多数据...),并停止了训练过程。
我在网上搜索了很多解决方案,其中许多方案提到步数(steps_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)