【问题标题】:How Keras really fits the models via epochsKeras 如何真正通过 epoch 拟合模型
【发布时间】:2019-06-04 15:56:13
【问题描述】:

我对 Keras 如何拟合模型有点​​困惑。通常,只需使用 model.fit(...) 即可拟合 Keras 模型,如下所示:

model.fit(X_train, y_train, epochs=300, batch_size=64, validation_data=(X_test, y_test))

我的问题是:因为我通过参数validation_data=(X_test, y_test) 陈述了测试数据,是否意味着每个时期都是独立的?换句话说,我知道在每个 epoch,Keras 使用训练数据训练模型(在被洗牌之后),然后使用提供的 validation_data 测试训练的模型。如果是这样的话,那么无论我选择多少个epoch,我都只取最后一个epoch的结果!!

如果这种情况是正确的,那么我们是否需要多个 epoch?除非这些 epoch 是相互依赖的,否则每个 epoch 使用与前一个 epoch 相同的 NN 权重,对吗?

谢谢

【问题讨论】:

  • "(洗牌后)" -> 请注意通过设置shuffle=False 禁用洗牌的可能性。 根据文档:“shuffle: Boolean(是否在每个 epoch 之前对训练数据进行洗牌)或 str(用于 'batch')。'batch' 是处理 HDF5 数据限制的特殊选项;它在批量大小的块。当 steps_per_epoch 不是 None 时无效。".

标签: keras neural-network data-science


【解决方案1】:

当 Keras 适合您的模型时,它会通过与您的 batch_size 相对应的步骤在每个时期传递所有数据集。
例如,如果您有一个包含 1000 个项目且 batch_size 为 8 的数据集,那么您的模型的权重将通过使用 8 个项目来更新,直到它看到您的所有数据集为止。

在该时期结束时,模型将尝试对您的验证集进行预测。
如果我们只做了一个 epoch,这意味着模型的权重每个元素只更新一次(因为它只“看到”了整个数据集的一次)。
但是为了最小化损失函数并通过反向传播,我们需要多次更新这些权重以达到最佳损失,因此多次遍历所有数据集,换句话说,多个 epoch。

我希望我很清楚,请问您是否需要更多信息。

【讨论】:

  • 非常感谢。在一个时期内,对每个批次实施前馈操作,然后进行反向传播以调整权重。对吗?
  • 这也意味着前一个时期的(调整的)权重被用作新时期的起始权重(有点像在时期之间执行权重,直到达到最大时期),这也是对吗?
  • 没错,每批通过后计算梯度,并以一个epoch的最终权重作为下一个epoch的起点!很高兴能帮到你!
猜你喜欢
  • 2020-05-12
  • 1970-01-01
  • 2021-09-30
  • 2019-02-10
  • 2020-03-24
  • 2018-10-26
  • 2022-01-19
  • 2020-12-03
  • 2020-09-04
相关资源
最近更新 更多