自定义学习率的变化
来源:10-27 自定义学习率
wxz123
2020-02-06
class CustomizedSchedule(
keras.optimizers.schedules.LearningRateSchedule):
def __init__(self, d_model, warmup_steps = 4000):
super(CustomizedSchedule, self).__init__()
self.d_model = tf.cast(d_model, tf.float32)
self.warmup_steps = warmup_steps
def __call__(self, step):
arg1 = tf.math.rsqrt(step)
arg2 = step * (self.warmup_steps ** (-1.5))
arg3 = tf.math.rsqrt(self.d_model)
return arg3 * tf.math.minimum(arg1, arg2)
learning_rate = CustomizedSchedule(d_model)
optimizer = keras.optimizers.Adam(learning_rate,
beta_1 = 0.9,
beta_2 = 0.98,
epsilon = 1e-9)
老师,像这种自定义的学习率,是每个batch_size就变化一次学习率,还是遍历整个数据集一次才变化一次学习率呢,还有像这样的问题我在官方文档都找不到具体的答案,我想问一下像这种问题老师一般都去哪里寻找答案呢?
写回答
1回答
-
同学你好,对于这个自定义学习率,每个batch都算一步。
一般来说,如果doc里找不到,doc中每个方法都有view source的按钮,可以点进去看源代码,比如https://www.tensorflow.org/api_docs/python/tf/keras/optimizers/schedules/LearningRateSchedule。
而对于这个问题,LearningRateSchedule是抽象方法,那么可以看类似的其他类的实现,比如ExponentialDecay
但对于你的这个问题而言,这样的方法都找不到具体的答案,因为这个问题更像是一个约定俗成的知识点。即step代表的是遍历过的batch数,而epoch代表的是遍历数据集的次数。在这里变量名用的step,所以应该是batch数。另外还有一点可以推理出来,那就是warmup step是4000,一般我们很少遍历数据集4000遍。
012020-02-12
相似问题