我正在阅读Python中的深度学习书,想了解更多关于定义steps_per_epoch
和batch size
时会发生什么。他们使用的示例由4000张猫狗图像组成,其中2000张用于训练,1000张用于验证,1000张用于测试。他们为他们的模型提供了两个例子。一个有图像增强,一个没有。我不明白为什么他们改变了这两种情况之间的批量大小。
我已经理解的过程是1 epoch是1遍历整个训练数据集。批处理大小决定了每一步显示多少图像。当我们改变批量大小时,我们改变了要学习的图像的数量。对于他们的第一个训练中有2000张图像的例子,每个epoch的批处理大小为20,100步是合乎逻辑的,也是他们使用的。它需要100步才能看到2000张图像,完成一个纪元。在他们的下一个例子中,他们实现了比重新缩放图像更多的增强(总共6次旋转变化,缩放,剪切等),批处理大小增加到32,但每个epoch的步骤保持在100。我假设随着批处理大小的增加,step_per_epoch减小,在本例中为63(从62.5向上取整)。为什么他们在这种情况下保持steps_per_epoch
不变?最后,考虑到舍入问题,模型是否没有看到一些训练数据或看到太多数据?
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale=1./255)
test_datagane = ImageDataGenerator(rescale=1./255)
train_generator=train_datagen.flow_from_directory(
train_dir,
target_size = (150,150)
batch_size=20 # for model 2 batch_size=32
class_mode='binary')
validation_generator = test_datagen.flow_from_directory(
validation_dir,
target_size = (150,150)
batch_size=20 # for model 2 batch_size=32
class_mode='binary')
history = model.fit_generator(
train_generator,
steps_per_epoch = 100, # same for both models
epochs=30,
validation_data=validation_generator,
validation_steps=50) # same for both models
对于2000个图像和一个batch_size = 32
,它将有62.5个步骤,正如您所说的那样,因此您不可能有100个步骤,批量大小为32。如果您将步骤指定为100,则会发生以下情况:
WARNING:tensorflow:Your input ran out of data; interrupting training.
Make sure that your dataset or generator can generate at least `steps_per_epoch * epochs` batches.
如果你想打印generator的长度,你会看到:
len(train_generator) = 63, batch_size = 32
len(train_generator) = 50, batch_size = 20