【问题标题】:Keras Sequence, fit_generator and steps_per_epochKeras 序列、fit_generator 和 steps_per_epoch
【发布时间】:2019-10-26 23:34:37
【问题描述】:

我注意到对于fit_generatorsteps_per_epoch 参数通常被分配total_samples//batch_size,在这里可以创建一个生成器/使用ImageDataGenerator 并将其作为参数传递给fit_generator

但是我使用 Sequence 类 (keras.utils.Sequence()) 来创建我的生成器并传递 steps_per_epoch 一个小于 total_samples//batch_size 的整数。

我想知道的是,一旦每个 epoch 完成,生成器中的数据生成是否会从头开始?

例如,我的训练集中有 3200 个样本,我使用的批量大小为 32。因此,理想情况下,对于一个完整的 epoch,我应该将 steps_per_epoch 设置为 100。但是,如果我将 steps_per_epoch 设置为50?一旦第一个 epoch 完成,将生成数据点编号 1601 (32*50) 还是从头开始(数据点编号 1)?

【问题讨论】:

    标签: python keras


    【解决方案1】:

    使用Sequence时,不需要传递steps_per_epoch,因为这个信息可以从你的Sequence.__len__方法推断出来

    如果你在使用Sequence 时传递steps_per_epoch,这将覆盖__len__ 方法的任何使用,它实际上只会使用序列中的steps_per_epoch 样本(从0 到steps_per_epoch - 1),并且它将在 epoch 结束时重置为零。您可以在keras source code 中检查此行为。

    【讨论】:

    • 有解决办法吗?我希望数据可以无限生成,检查点的模型评估只在每个steps_per_epoch 运行一次。
    • @JashShah 解决方法是什么?这就是它默认的工作方式,你只需要确保你的序列无限生成数据
    • 解决方法使生成器在每次steps_per_epoch 后不重置为零
    • @JashShah 序列索引是一个抽象,你可以在每个时期返回不同的图像,不需要任何变通方法。
    • @JashShah 我无法进一步详细说明,没有源代码之类的上下文,您只需创建一个生成器或序列,在每个时期返回不同的图像,在生成器/序列中,您可以完全控制什么返回到 Keras。
    猜你喜欢
    • 1970-01-01
    • 2018-03-30
    • 2020-01-02
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-13
    • 2021-05-14
    相关资源
    最近更新 更多