首页 > 解决方案 > 在 Keras 中定义 steps_per_epoch

问题描述

我正在阅读 Python 中的深度学习一书,并想更多地了解定义steps_per_epochand时会发生什么batch size。他们使用的示例包含 4000 张狗和猫的图像,其中 2000 张用于训练,1000 张用于验证,1000 张用于测试。他们提供了两个模型示例。一种有图像增强功能,一种没有。我对他们为什么改变这两种情况之间的批量大小感到困惑。

我理解这个过程是 1 个 epoch 是 1 次遍历整个训练数据集。批量大小决定了每一步显示多少图像。当我们更改批量大小时,我们会更改要从中学习的图像数量。对于他们的第一个训练有 2000 张图像的示例,批量大小为 20,每个 epoch 100 步是合乎逻辑的并且他们使用什么。需要 100 步才能看到 2000 张图像,完成一个 epoch。在他们的下一个示例中,他们实现了比重新缩放图像更多的增强(总共 6 次旋转变化、缩放、剪切等),批量大小增加到 32,但他们每个时期的步数为 100。我假设随着增加在批量大小中,steps_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

标签: tensorflowkerasconv-neural-network

解决方案


如您所说,使用 2000 张图像和 a batch_size = 32,它将有 62.5 个步骤,因此您不能有 32 个批量大小的 100 个步骤。如果您将步骤指定为 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.

如果您想打印生成器的长度,这也是您将看到的:

len(train_generator) = 63, batch_size = 32
len(train_generator) = 50, batch_size = 20

推荐阅读