在Keras中使用Adam优化器的指数衰减学习率参数。

3

考虑以下信息:

  • 初始学习率:0.0002

  • 衰减系数:0.7

  • epoch数:70

我的问题是如何选择衰减步长,使得每两个epoch就进行一次衰减。我该如何在Keras中解决这个问题?

这是指数衰减学习率的公式:

点击此处查看图片

1个回答

2
似乎可以使用指数衰减的学习率调度器ExponentialDecay。为了每两个时期进行衰减,decay_steps应该是num_steps_per_epoch * 2。同时将staircase参数设置为True,以便离散地降低学习率。
代码示例如下(我没有运行过这段代码):
initial_learning_rate = 0.0002
steps_per_epoch = ...
lr_schedule = tf.keras.optimizers.schedules.ExponentialDecay(
    initial_learning_rate,
    decay_steps=steps_per_epoch * 2,
    decay_rate=0.7,
    staircase=True)

然后使用 learning_rate 参数将 lr_schedule 传递给 Adam

你通常选择什么值作为steps_per_epoch? - garbage_collector
1
这取决于您的数据集大小和批量大小。在您的问题中,您说您想每两个时期更新一次。因此,假设您有1000个样本和批量大小为20,则一个时期将是1000/20 = 50步(steps_per_epoch = 50)。 - benbotto
在我的情况下,我有1905个样本和批量大小为32,因此steps_per_epoch = 1905/32 = 59.53 => 60 ?? - garbage_collector
是的。我认为decay_steps需要是一个整数,因为staircase参数基本上告诉ExponentialDecay调度在计算中从您的图像中的(global_step / decay_steps)部分进行整数除法。我会传递decay_steps=119(59.5 * 2)。 - benbotto
只有在steps_per_epoch不是整数时才会出现这种情况,但这并不重要。我的回答是否解决了你的问题?如果是,请考虑将其标记为解决方案。 - benbotto
看起来 decay_steps 是否为整数并不重要。如果 staircaseTrue,代码只会执行 floor 操作:https://github.com/tensorflow/tensorflow/blob/v2.5.0/tensorflow/python/keras/optimizer_v2/learning_rate_schedule.py#L185 - benbotto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接