代码之家  ›  专栏  ›  技术社区  ›  sashaostr

Keras/Tensorflow中不同时期的训练率如何变化

  •  1
  • sashaostr  · 技术社区  · 6 年前

    当使用其中一个自适应优化器(Adam等)时,我们希望在EPHO内的训练期间更改连续小批量的学习率。 但我想知道,在连续的历代之间,学习速度会发生怎样的变化——是从上一个历代(预期行为)继续,还是从默认值初始化?

    当然,术语“速率”指的是特定优化器用来确定实际权重的所有变量(更新wrt梯度)

    还有,如果我运行N个时代的训练,停下来然后继续这样做,速度会发生什么变化:

    model.fit(data1_train_x,data1_train_y, \
    
              initial_epoch=0, \
              epochs=20, \             
    
              validation_split=0.1,\
              batch_size=64, \
              callbacks=[tensorboard])
    
    model.fit(data2_train_x,data2_train_y, \
    
              initial_epoch=20, \
              epochs=40, \
    
              validation_split=0.1,\
              batch_size=64, \              
              callbacks=[tensorboard])
    

    我想我会在每个历元之后创建回调来记录速率并绘制它,但在我这样做之前,可能有人已经知道了答案。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Prune    6 年前

    总结

    速率变化不重置;在这两种情况下,它们都能顺利地跨越各个时代。

    细节

    自迭代0以来,任何表现良好的学习率衰减函数都取决于训练的长度。

    注:您可以编写自己的衰减函数;你可以随心所欲地制造混乱。其中一个变更是

    alpha = iteration_number
    

    这会在你喝咖啡回来之前发生分歧。

    有些函数仅依赖于当前状态和修饰符,例如

    if iteration_number % 5000 == 0:
        alpha *= 0.9
    

    另一种是半指数衰减,取决于剩余迭代的数量。

    无论如何,这些 在每个历元开始时重置。如果你愿意,你可以写一个来重置,但我不建议这样做。

    您的两阶段示例 也不例外, 因为 您已经正确地编写了代码:第二个训练段从上一个训练段结束的地方开始。这里的关键线索是 initial_epoch 参数:您告诉拟合函数从何处开始学习速率,而不是重置为时间零点。