【问题标题】:How to understand steps_per_epoch in fit_generator using keras? [duplicate]如何使用keras理解fit_generator中的steps_per_epoch? [复制]
【发布时间】:2019-10-28 08:15:50
【问题描述】:

我的印象是steps_per_epoch可以等于样本总数除以batch size,这样每个epoch都会看到每个样本,但是显示的数字让我觉得它训练的次数远少于那个。 (如果我没看错的话:https://stanford.edu/~shervine/blog/keras-how-to-generate-data-on-the-fly) 这是相关行(我明确写了样本数)

model.fit_generator(
    train_generator,
    steps_per_epoch= 2451 // BATCH_SIZE,
    epochs=10)

但训练过程的输出似乎显示了 153/154 之类的数字,但我的数据集超过 3000 个样本)。 那么,最后,steps_per_epoch 是关于什么的?我的模型是否在当前状态下查看每个时期的所有样本?如果没有,我该如何纠正?

Epoch 1/10
153/153 [==============================] - 34s 225ms/step - loss: -0.4054 - dice_coef: 0.4054 - binary_accuracy: 0.2559 - acc: 0.2559
Epoch 2/10

【问题讨论】:

  • 我不确定这是否与问题足够相关,但只是想指出,可能是您正在过滤train_generator 中的一些数据吗? 2451 可能不是您输入模型的数据的确切数量,因为有些可能会在 train_generator 中被过滤掉
  • 什么是train_generator?如果它是一个序列(例如 ImageDataGenerator 是一个),那么它将覆盖每个时期的步骤,因为序列有自己的长度方法。

标签: machine-learning keras deep-learning


【解决方案1】:

你说no of step应该等于total_dataset/batch_size是对的,但没必要这样做(你可以放任何no),这里有三种可能的情况:-

  1. No_of_step = total_dataset/batch_size - 在一个 epoch 模型中,一个图像(数据)只能看到一次。
  2. No_of_step < total_dataset/batch_size - 模型将无法看到少数人遗漏的所有图像。
  3. No_of_step > total_dataset/batch_size - 部分图片会在网络中多次传递。

注意:- 如果shuffle = True 很难猜出哪个图像被遗漏或哪个图像被重复。

【讨论】:

  • 我看到的数字 153 怎么样?它代表什么?我想我是您引用的第一个案例,但是当我使用常规拟合函数时,输出显示的数字要高得多(即:类似Epoch 1/10 200/3500 )。而不是Epoch 1/10 153/153
  • @KazihiseGuy-Fernand 你能说出你使用的训练数据总量和批大小吗?
  • 训练数据总量为2452,还有612个样本进行测试。批量大小为 16(来自变量 BATCHSIZE,在调用 fit_generator 时使用)。另外,我不确定它是否与问题相关,但我在调用 imagedatagenerator 的 flow_from_director 函数时也指定了一个 batch_size 参数。我使用变量 BATCHSIZE 给了它相同的值 (16)。
  • 您的训练数据为 2452,批量大小为 16,因此您的步数应为 2452 / 16 = 153.25,这不是一个完整的否,因此我们必须采用 2452 // 16 = 153。因此将有 153 个步骤,模型在单个 epoch 中看到的总图像是 153 * 16 = 2448 ,这里每个 epoch 将省略 4 个图像
  • 我现在明白了,感谢您的回答和耐心! :)
猜你喜欢
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 2019-10-26
  • 2020-01-02
  • 2018-03-01
  • 1970-01-01
  • 2019-09-17
  • 1970-01-01
相关资源
最近更新 更多