退化学习率用法实例
程序员文章站
2023-12-30 19:04:58
...
使用迭代循环计数变量global_step来标记循环次数,初始学习率为0.1,令其以每10次衰减0.9的速度来进行退化。
定义一个学习率变量,将其衰减系数都设置好,并设置好迭代循环的次数,将每次迭代运算的次数与学习率打印出来,观察学习率按照次数退化的现象。
import tensorflow as tf
global_step = tf.Variable(0, trainable=False)
# 初始化学习率
initial_learning_rate = 0.1
learning_rate = tf.train.exponential_decay(initial_learning_rate, global_step=global_step, decay_steps=10, decay_rate=0.9)
opt = tf.train.GradientDescentOptimizer(learning_rate)
# 定义一个op,令global_step加1完成记步
add_global = global_step.assign_add(1)
with tf.Session() as sess:
tf.global_variables_initializer().run()
print(sess.run(learning_rate))
for i in range(20):
# 循环20步,将每步的学习率打印出来
g, rate = sess.run([add_global, learning_rate])
print(g, rate)
运行代码得到结果:
0.1
1 0.1
2 0.09895193
3 0.09791484
4 0.09688862
5 0.095873155
6 0.094868325
7 0.09387404
8 0.092890166
9 0.09191661
10 0.09095325
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
第1个数是迭代的次数,第2个输出是学习率。可以看到学习率在逐渐变小。
注意:这是一种常用的训练策略,在训练神经网络时,通常在训练刚开始时使用较大的learning rate,随着训练的进行,会慢慢减小learning rate。在使用时,一定要把当前迭代次数global_step传进去,否则不会有退化的功能。