【问题标题】:Training Keras continuously vs single iterations连续训练 Keras 与单次迭代
【发布时间】:2018-10-07 13:10:32
【问题描述】:

训练 Keras 模型一次 64 个 epoch 和 64 次一个 epoch 有什么区别吗?
在这种情况下渐变如何工作?他们如何保存预览操作的历史以调整势头?

1)

model.fit(X, y, batch_size=64, epochs=64, verbose=False)

2)

for i in range(64):
    verbose = (i % 16) == 0
    if verbose:
       print(i, end='')
    model.fit(X, y, batch_size=64, epochs=1, verbose=verbose)

【问题讨论】:

  • 没有区别。如果您更改批量大小,则会出现差异。 (对每批执行梯度下降)。

标签: python machine-learning keras gradient-descent


【解决方案1】:

这两者之间没有显着区别,因为 Model.fit() 在内部运行 _fit_loop 方法以获取 epoch 的数量(源代码在 keras/engine/training.py),所以这就像...之间的区别......

for i in range(64):
  j += 1

...和...

 for i in range(64):
   for k in range(1):
     j += 1

但它们仍然不是完全等效的,因为除了训练本身之外,keras 还做了一些事情:

  • 在第二种方法 (model.history) 中丢失了训练的历史记录。如果您想检查学习曲线(通常会这样做),则必须手动维护它。
  • Xy 在循环之前都是标准化的(参见Model._standardize_user_data 方法)。在某些情况下,标准化的开销可以与一个 epoch 的训练相媲美,在这种情况下,您可能会减慢这一过程。
  • 但是,第二种方法允许您更改每个 epoch 的参数,例如批量大小或改组。不知道这是否有什么大不了的。

顺便说一句,如果您只是想在每个 epoch 之前或之后打印一些内容,请使用 keras callbacks,例如on_train_end()回调方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 2020-10-29
    • 1970-01-01
    • 2017-07-28
    • 2020-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-10-28
    相关资源
    最近更新 更多