主要是用在梯度下降中的学习率问题上,设置学习率的大小, 是在精度和速度之间找到一个平衡:
- 如果学习率的值比较大, 则训练速度会提升, 但结果的精度不够。
- 如果学习率的值比较小, 精度虽然提升了, 但训练会耗费太多的时间。
global_step所以引入了退化学习率又叫学习率衰减, 它的本意是希望在训练过程中对于学习率大和小的优点都能够为我们所用, 也就是当训练刚开始时使用大的学习率加快速度, 训练到一定程度后使用小的学习率来提高精度, 这时可以使用学习率衰减的方法:
tf.train.exponential_decay(learning_rate,global_step,deacy_step,deacy_rate,staircase = False,name = None) 1
当staircase = True表示没有衰减的功能。默认为False。
上面函数的意思是每迭代1000步,学习率衰减到原来的90%,其中global_step
表示的是当前的迭代步数,用来记录循环次数。
global_step = tf.Variable(0,trainable=False) • 1
实例表述
import tensorflow as tf tf.reset_default_graph() global_step = tf.Variable(0,trainable=False) 通过exponential_decay函数生成学习率 learning_rate = tf.train.exponential_decay(0.1,global_step, 10, 0.9, staircase = False) opt = tf.train.GradientDescentOptimizer(learning_rate=learning_rate) add_global = global_step.assign_add(1) with tf.Session() as sess: sess.run(tf.global_variables_initializer()) print(learning_rate.eval()) for i in range(20): g,rat = sess.run([add_global,learning_rate]) print(g,rat)
结果
0.1 1 0.09895193 2 0.09791484 3 0.09688862 4 0.095873155 5 0.095873155 6 0.09387404 7 0.092890166 8 0.09191661 9 0.09095325 10 0.089999996 11 0.089999996 12 0.08812335 13 0.087199755 14 0.08628584 15 0.0853815 16 0.08448663 17 0.08360115 18 0.08272495 19 0.08185793 20 0.08099999
注意:在使用时, 一定要把当前迭代次数global_step传进去, 否则不会有退化的功能。