tensorflow - 在 Keras 中定义 steps_per_epoch
问题描述
我正在阅读 Python 中的深度学习一书,并想更多地了解定义steps_per_epoch
and时会发生什么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
解决方案
如您所说,使用 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
推荐阅读
- javascript - gl-matrix mat4 缺少 Float32Array 属性
- python - 检测 180 度旋转并从数组中删除旋转的元素
- c++ - CUDA 在内核函数中的嵌套循环后不执行代码
- r - 如何迭代多个向量
- javascript - 不能使用异步管道 RXJS - ANGULAR
- node.js - Mongoose updateMany 依赖于旧值
- python - 用于获取视频标题而不是下载视频的 youtube-dl 选项
- python - 如何在 django 中的 models.py 中的下拉列表中显示特定结果
- image - 如何拆分augmentedImageDatastore?
- c# - SendMessage,正在尝试发送 F4