连续训练Keras与单次迭代

时间:2018-04-26 18:23:56

标签: python machine-learning keras gradient-descent

在一个纪元的64次64个时期内训练Keras模型之间是否有任何差异。
在这种情况下,渐变如何工作?他们如何保留预览操作的历史以调整动力?

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)

1 个答案:

答案 0 :(得分:0)

这两者之间没有重大差异,因为 Model.fit()正在内部运行_fit_loop方法获取时期数(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方法)。在某些情况下,标准化的开销可以与一个时代的培训相媲美,在这种情况下,您可能会减慢这一过程。
  • 然而,第二种方法允许您更改每个纪元的参数,例如批量大小或改组。不确定这是不是很重要。

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