learning rate学习率的颠簸问题

一、问题简介

        学习率过大会导致在最优的点附近颠簸,无法收敛到最优,二学习率太小又会造成收敛速度过慢的问题。

二、直观感受

        我们利用tensorflow2.0来直观感受这一问题:

        代码:

import tensorflow as tf

w = tf.Variable(tf.constant(5, dtype=tf.float32))
lr = 0.2
epoch = 40

for epoch in range(epoch):  # for epoch 定义顶层循环,表示对数据集循环epoch次,此例数据集数据仅有1个w,初始化时候constant赋值为5,循环40次迭代。
    with tf.GradientTape() as tape:  # with结构到grads框起了梯度的计算过程。
        loss = tf.square(w + 1)
    grads = tape.gradient(loss, w)  # .gradient函数告知谁对谁求导

    w.assign_sub(lr * grads)  # .assign_sub 对变量做自减 即:w -= lr*grads 即 w = w - lr*grads
    print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss))

结果:

        (学习率0.2时):很快收敛

        

 学习率为0.009时:收敛速度很慢

        学习率为0.99时:在最优结果左右反复变化

扫描二维码关注公众号,回复: 14824559 查看本文章

因此,学习率是影响爱戴结果的重要因素,如何解决这一问题,有很多种方法比如adam,adagrad等等,参考另一篇博客:

https://mp.csdn.net/mp_blog/creation/editor/118712546

猜你喜欢

转载自blog.csdn.net/qq_46006468/article/details/119357930