【问题标题】:What to do if I don't want to waste samples by flooring steps_per_epoch in model.fit?如果我不想通过在 model.fit 中放置 steps_per_epoch 来浪费样本怎么办?
【发布时间】:2022-08-05 18:46:53
【问题描述】:

我有一个模型,它有 536 个训练样本,并且想遍历每个时期的所有样本。批量大小为 32,epoch 为 50。这是代码及其错误:

results = model.fit(train_X, train_y, batch_size = 32, epochs = 50, validation_data=(val_X, val_y), callbacks=callbacks)

你传递的数据集包含837个批次,但是你传递了epochs=50steps_per_epoch=17,一共是850步。我们不能从这个数据集中画出那么多步骤。我们建议设置steps_per_epoch=16

样本总数 / 批量大小 = 每个 epoch 的步数 = 536/32 = 16.75。如果我设置每个 epoch = 16 的步数,model.fit 将起作用。这是否意味着我每个 epoch 丢弃 24 个样本 (0.75 * 32)?

如果是,我怎样才能不丢弃这些样本?一种方法是调整批量大小以在将样本数按其进行潜水时没有残留。

如果还有其他方法,请赐教。

  • 你需要使用Dataset吗?您是否对训练数据进行了即时更改?你在使用增强吗?如果所有这些都不是,则不需要设置steps_per_epoch。您总是可以排除该参数并查看它是如何工作的。它可能会正常工作。不设置它至少可以确保使用所有输入数据。
  • @Djinn,即使我排除了参数steps_per_epoch,model.fit 函数也会输出上述错误。因此,如果不显式设置参数steps_per_epoch,该函数将无法工作。对于这种情况,是否有任何其他方法可以强制每个 epoch 16 个步骤执行 32 个批次,其余样本强制执行 24 个批次?
  • steps_per_epoch 设置为 1。
  • @Djinn,不会将 steps_per_epoch 设置为 1 强制批量大小达到 536,因为每个时期的样本数/步数 = 536,这是批量大小?如果我有误解请赐教
  • 是的。或者您可以尝试将其设置为样本数。没有固定的规则,你可以玩弄它。如果您正在使用数组或将所有内容加载到内存中,则可以真正避免所有这些。

标签: tensorflow tf.keras


【解决方案1】:

如果您不想丢弃任何数据样本进行训练,最好不要在定义batch_size 后使用steps_per_epoch。因为模型本身可以计算steps_per_epoch,同时根据定义的batch_size训练输入数据集并提供训练样本。

请仔细阅读此附件gist,我已在其中尝试更详细地阐述这些术语。

【讨论】:

    猜你喜欢
    • 2018-11-11
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多