我需要每10个周期应用一次学习率的指数衰减。初始学习率为0.000001
,衰减因子为0.95
这是设置它的正确方法吗?
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=0.000001,
decay_steps=(my_steps_per_epoch*10),
decay_rate=0.05)
opt = tf.keras.optimizers.SGD(learning_rate=lr_schedule, momentum=0.9)
指数衰减的公式为current_lr = initial_lr * (1 - decay_factor)^t
除了在the code中实现为:
decayed_learning_rate = learning_rate *
decay_rate ^ (global_step / decay_steps)
据我所知,decay_rate
应该是1 - decay_factor
,decay_steps
应该表示在应用衰减之前执行了多少步骤,在我的情况下是my_steps_per_epoch*10
。正确吗?
编辑:
如果我在第10个时间段后暂停并保存我的模型(使用回调),然后通过加载模型并通过model.fit
和initial_epoch=10
调用epochs=11
来恢复,它将开始于第11个时代并应用指数衰减?
答案 0 :(得分:0)
decay_steps
可用于说明在经过多少步(处理批次)后,您将衰减学习率。我发现通过以下方式指定初始和最终学习率并自动计算decay_factor非常有用:
initial_learning_rate = 0.1
final_learning_rate = 0.0001
learning_rate_decay_factor = (final_learning_rate / initial_learning_rate)**(1/epochs)
steps_per_epoch = int(train_size/batch_size)
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
initial_learning_rate=initial_learning_rate,
decay_steps=steps_per_epoch,
decay_rate=learning_rate_decay_factor,
staircase=True)