文章目录

  1. 1. 参考资料

学习率决定了参数每次更新的幅度。如果幅度过大,那么可能导致参数在极优值的两侧来回移动。相反的,当学习率过小时,虽然能保证收敛性,但是这会大大降低优化速度。

train = tf.train.GradientDescentOptimizer( η ).minimize(loss)

其中,学习率 η 来定义每次参数更新的幅度。

TensorFlow 提供了一种更加灵活的学习率设置方法 - 指数衰减法。tf.train.exponential_decay 函数实现了指数衰减学习率。通过这个函数,可以先使用较大的学习率来快速得到一个比较优的解,然后随着迭代的继续逐步减少学习率,使得模型在训练后期更加稳定。

tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)

它的计算实现如下:

decayed_learning_rate = learning_rate * decay_rate ^ (global_step / decay_steps)  

其中,learning_rate 是初始学习率,decay_rate 是每轮学习的衰减率, global_step 是当前的学习步数,等同于我们将 batch 放入学习器的次数,decay_steps 是每轮学习的步数。

现在,我们来看一个案例。

global_step = tf.Variable(0) 

learning_rate = tf.train.exponential_decay(0.1, global_step, 100, 0.95, staircase=True) 
train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss,global_step=global_step)

上面这段代码,我们设定了初始学习率为 0.1,因为指定了 staircase = True,所以每训练 100 轮后学习率乘以 0.95。一般来说,初始学习率、衰减系数和衰减速度都是根据经验设置的。

这里,要注意的是,在minimize() 要加上 global_step=global_step,这样学习速率才会跟着迭代,不然学习速率会一直保持初始值。

参考资料

(完)

微信公众号

文章目录

  1. 1. 参考资料