TensorFlow之⼆—学习率(learningrate)
⽂章⽬录
在TensorFlow训练⼀个模型时,我们需要通过优化函数来使得我们训练的模型损失值达到最⼩。
常⽤的优化算法有随机梯度下降、批量梯度下降等( )。在使⽤优化算法的时候,我们都需要设置⼀个学习率(learning rate)。我这⾥总结了⼀些博主的⽅法。
学习率 的设置在训练模型的时候也是⾮常重要的,因为学习率控制了每次更新参数的幅度。()
学习率太⼤:就会导致更新的幅度太⼤,就有可能会跨过损失值的极⼩值(该极⼩值有可能是局部的最⼩值,也可能是全局最⼩值),最后可能参数的极优值会在参数的极优值之间徘徊,⽽取不到参数的极优值。形容色彩的成语
学习率太⼩,就会导致的更新速度太慢,模型收敛慢,从⽽需要消耗更多的资源来保证获取到参数的极优值。
⼀、分段常数衰减 tf.train.piecewi_constan()
boundaries,# 学习率参数应⽤区间列表
values,# 学习率列表,values长度⽐boundaries长度多⼀
name=None# 名称
)
# coding:utf-8
import matplotlib.pyplot as plt
乾隆的母亲是谁import tensorflow as tf
num_epoch = tf.Variable(0, name='global_step', trainable=Fal)
boundaries =[10,20,30]
learing_rates =[0.1,0.07,0.025,0.0125]
y =[]
N =40
with tf.Session()as ss:
ss.run(tf.global_variables_initializer())
for num_epoch in range(N):
learing_rate = tf.train.piecewi_constant(num_epoch, boundaries=boundaries, values=learing_rates)
lr = ss.run([learing_rate])
y.append(lr)
x =range(N)
plt.plot(x, y,'r-', linewidth=2)
plt.title('piecewi_constant')
经络推拿plt.show()# 展⽰结果如下图左
⼆、指数衰减 ponential_decay()
指数衰减是⽐较常⽤的衰减⽅法,学习率是跟当前的训练轮次指数相关的。
learning_rate,# 初始学习率
global_step,# 当前训练轮次,epoch
decay_steps,# 定义衰减周期,跟参数stairca配合,可以在decay_step个训练轮次内保持学习率不变 decay_rate,# 衰减率系数
stairca=Fal,# 定义(阶梯型衰减 /连续衰减),默认是Fal,即连续衰减(标准的指数型衰减)
name=None# 操作名称
)
函数返回学习率数值,计算公式是:
decayed_learning_rate=learning_rate∗decay_rate(global_step/decay_steps)
import matplotlib.pyplot as plt
import tensorflow as tf
num_epoch = tf.Variable(0, name='global_step', trainable=Fal)
y =[]脸浮肿
z =[]
N =200
with tf.Session()as ss:
ss.run(tf.global_variables_initializer())
for num_epoch in range(N):
# 阶梯型衰减
百尺竿头
learing_rate1 = ponential_decay(
learning_rate=0.5, global_step=num_epoch, decay_steps=10, decay_rate=0.9, stairca=True) # 标准指数型衰减
learing_rate2 = ponential_decay(
learning_rate=0.5, global_step=num_epoch, decay_steps=10, decay_rate=0.9, stairca=Fal)
lr1 = ss.run([learing_rate1])
lr2 = ss.run([learing_rate2])
y.append(lr1)
z.append(lr2)
x =range(N)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.t_ylim([0,0.55])
物联网的发展前景plt.plot(x, y,'r-', linewidth=2)
plt.plot(x, z,'g-', linewidth=2)
plt.title('exponential_decay')
ax.t_xlabel('step')
ax.t_ylabel('learing rate')
plt.show()#展⽰结果如上图右
红⾊的是阶梯型指数衰减,在⼀定轮次内学习率保持⼀致,绿⾊的是标准的指数衰减,即连续型指数衰减。
三、⾃然指数衰减 tf.train.natural_exp_decay()
⾃然指数衰减是指数衰减的⼀种特殊情况,学习率也是跟当前的训练轮次指数相关,只不过以 e 为底数。
鳄鱼简介
learning_rate,# 初始学习率
global_step,# 当前训练轮次,epoch
decay_steps,# 定义衰减周期,跟参数stairca配合,可以在decay_step个训练轮次内保持学习率不变
decay_rate,# 衰减率系数
stairca=Fal,# 定义(阶梯型衰减 /连续衰减),默认是Fal,即连续衰减(标准的指数型衰减)
name=None# 操作名称
)
⾃然指数衰减的计算公式是:
decayed_learning_rate=learning_rate∗exp(−decay_rate∗global_step)
import matplotlib.pyplot as plt
import tensorflow as tf
num_epoch = tf.Variable(0, name='global_step', trainable=Fal)
y =[]
z =[]
w =[]
市场策划m =[]
N =200
with tf.Session()as ss:
ss.run(tf.global_variables_initializer())
for num_epoch in range(N):
# 阶梯型衰减
learing_rate1 = tf.train.natural_exp_decay(
learning_rate=0.5, global_step=num_epoch, decay_steps=10, decay_rate=0.9, stairca=True) # 标准指数型衰减
learing_rate2 = tf.train.natural_exp_decay(
learning_rate=0.5, global_step=num_epoch, decay_steps=10, decay_rate=0.9, stairca=Fal) # 阶梯型指数衰减
learing_rate3 = ponential_decay(
learning_rate=0.5, global_step=num_epoch, decay_steps=10, decay_rate=0.9, stairca=True) # 标准指数衰减
learing_rate4 = ponential_decay(
learning_rate=0.5, global_step=num_epoch, decay_steps=10, decay_rate=0.9, stairca=Fal)
lr1 = ss.run([learing_rate1])
lr2 = ss.run([learing_rate2])
lr3 = ss.run([learing_rate3])
lr4 = ss.run([learing_rate4])
y.append(lr1)
z.append(lr2)
w.append(lr3)
m.append(lr4)
x =range(N)
fig = plt.figure()
ax = fig.add_subplot(111)
ax.t_ylim([0,0.55])
plt.plot(x, y,'r-', linewidth=2)
plt.plot(x, z,'g-', linewidth=2)
plt.plot(x, w,'r-', linewidth=2)
plt.plot(x, m,'g-', linewidth=2)
plt.title('natural_exp_decay')
ax.t_xlabel('step')
ax.t_ylabel('learing rate')
plt.show()# 展⽰结果如下图左
显然:左下部分的两条曲线是⾃然指数衰减,右上部分的两条曲线是指数衰减,可见⾃然指数衰减对学习率的衰减程度要远⼤于⼀般的指数
衰减,⼀般⽤于可以较快收敛的⽹络,或者是训练数据集⽐较⼤的场合。
四、多项式衰减 tf.train.polynomial_decay()
多项式衰减是这样⼀种衰减机制:定义⼀个初始的学习率,⼀个最低的学习率,按照设置的衰减规则,学习率从初始学习率逐渐降低到最低的学习率,并且可以定义学习率降低到最低的学习率之后,是⼀直保持使⽤这个最低的学习率,还是到达最低的学习率之后再升⾼学习率到⼀定值,然后再降低到最低的学习率(反复这个过程)。
tf .train .polynomial_decay (
learning_rate , # 初始学习率
global_step , # 当前训练轮次,epoch
decay_steps , # 定义衰减周期
end_learning_rate =0.0001, # 最⼩的学习率,默认值是0.0001
power =1.0, # 多项式的幂,默认值是1,即线性的
cycle =Fal , # 定义学习率是否到达最低学习率后升⾼,然后再降低,默认Fal ,保持最低学习率
name =None # 操作名称
)
1.多项式衰减的学习率计算公式:
2.如果定义 cycle为True,学习率在到达最低学习率后往复升⾼降低,此时学习率计算公式为:
global_step =min (global_step ,decay_steps )
decayed_learning_rate =(learning_rate −end_learning_rate )∗
(1−global_step/decay_steps )+end_learning_rate
power decay_steps =decay_steps ∗ceil (global_step/decay_steps )
decayed_learning_rate =(learning_rate −end_learning_rate )∗
(1−global_step/decay_steps )+end_learning_rate power