在 TensorFlow/Keras 中使用学习率衰减时恢复训练时的行为是什么?

What is the behaviour when resuming the training, when learning rate decay is used, in TensorFlow/Keras?

我很难理解当使用如下所示的调度程序从磁盘加载模型时如何恢复训练。

learning_rate_scheduler = tensorflow.keras.optimizers.schedules.ExponentialDecay(
0.01, 
decay_steps=1000, 
decay_rate=0.96, 
staircase=True)

考虑这种假设情况,我训练模型一个时期并保存。后来我加载了模型并再次安装。在这种情况下,训练会从先前保存模型时的学习率恢复,还是会从调度程序的预定义配置开始?

编辑

我正在以标准方式保存我的模型,

model.save("model")

下面是加载后的优化器配置。学习率配置同定义

hour_glass_model.optimizer.get_config()
{'amsgrad': False,
 'beta_1': 0.9,
 'beta_2': 0.999,
 'decay': 0.0,
 'epsilon': 1e-07,
 'learning_rate': {'class_name': 'ExponentialDecay',
  'config': {'decay_rate': 0.96,
   'decay_steps': 1000,
   'initial_learning_rate': 0.01,
   'name': None,
   'staircase': True}},
 'name': 'Adam'}

取决于您保存模型的方式。如果您使用 Model.save() 的标准方法,则会保存优化器状态。 优化器配置已保存。学习率将从初始值开始

参考:https://www.tensorflow.org/guide/keras/save_and_serialize

请参阅 save API 默认情况下 include_optimizer=True

当您在使用 model.save 后重新开始训练时,它会使用您保存模型时的学习率进行训练。为了确保我使用学习率调度程序 callback.The 编写了一个简单的回调代码,回调代码如下所示。然后我训练了一个模型 5 个时期,保存模型,加载模型并再次训练。回调在每个时期开始时打印学习率的值,并显示训练恢复时学习率被保留。

def scheduler(epoch, lr):
    lrin=lr
    if epoch < 2:
     lrout=lr
    else:
        lrout= lr * .5
    print ('At the start of epoch ', epoch+1, 'lr is ', lrin, ' will be set to ', lrout, ' for epoch ', epoch+2)
    return lrout
lrs=tf.keras.callbacks.LearningRateScheduler(scheduler)

在调用 model.fit 之前将其放入您的代码中。然后在 model.fit 中包含

callbacks=[lrs]