在模型的训练过程中,一般有俩种方法来对学习率进行更改,一种是学习率指数衰减,还有一种是自定义一个迭代区间,在不同区间内,赋予不同的学习率
1,指定不同的区间给定不同的学利率
使用tf.piecewise_constant(global_step,qvjian,value)
qvjian:为指定学习率所在区间
value:为在qvjian中的学习率
这里注意,qvjian的值比value少一个,因为区间是从0开始算的,而在代码中没有体现,所以会少一个
既然已经定义了区间,定义了区间内的学习率,那么需要一个指针来确定现在训练到哪一步,也就是位于哪个区间内,因此需要指定一个指针global_step。
代码如下:
import tensorflow as tf
qvjian = [2,5]
value = [0.01,0.005,0.001]
#因为要根据迭代次数指定区间,和value,这里定义一个variable
global_step = tf.Variable(0,trainable=False)
#初始化变量
init = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init)
#假设训练10次
for global_step in range(10):
lr = tf.train.piecewise_constant(global_step,qvjian,value)
lr_ = sess.run(lr)
print(global_step,lr_)
#结果为:
0 0.01
1 0.01
2 0.01
3 0.005
4 0.005
5 0.005
6 0.001
7 0.001
8 0.001
9 0.001
2.设定学习率指数衰减
tf.trian.exponential_decay(
learning_rata:
global_step:
decay_steps:
decay_rata:
staircase=False:
name = None
)
参数解释:
learnIng_rate:初始学习率
global_step:和tf.train.piecewise_constant()中一样为step指针
decay_steps:衰减步数,为一个定值,每多少步进行一次衰减
decay_rata:衰减率,也为一个定值
最后输出的学习率
decayed_learning_rata = learning_rata * decay_rata ^ (global_step / decay_steps)
代码示例:
learning_rata = 0.1
decay_steps = 60
decay_rata = 0.8
#方便画图,
X,Y = list(),list()
for global_step in range(1000):
decayed_learning_rata = learning_rata * decay_rata **(global_step/decay_steps)
X.append(global_step)
Y.append(decayed_learning_rata)
plt.plot(X,Y,'b')
plt.ylabel('learning_rata学习率')
plt.xlabel('global_step')
plt.show()