自定义学习率的变化

来源: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回答

正十七

2020-02-12

同学你好,对于这个自定义学习率,每个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遍。

0
1
wxz123
非常感谢!
2020-02-12
共1条回复

Google老师亲授 TensorFlow2.0 入门到进阶

Tensorflow2.0实战—以实战促理论的方式学习深度学习

1849 学习 · 896 问题

查看课程