大家好,又见面了,我是你们的朋友全栈君。
学习率属于超参数。学习率决定梯度下降速度的快慢,学习率越大,速度越快;学习率越小,速度越慢。如果学习率过大,很可能会越过最优值;反而如果学习率过小,优化的效率可能过低,长时间算法无法收敛。所以学习率对于算法性能的表现至关重要。
指数衰减学习率是在学习率的基础上增加了动态变化的机制,会随着梯度下降变化而动态变化
tf.train.exponential_decay(learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None)
False
,此时学习率随迭代轮数的变化是连续的(指数函数);为 True
时,global_step/decay_steps
会转化为整数,此时学习率便是阶梯函数步骤:
模板:
global_step = tf.Variable(0)
learning_rate = tf.train.exponential_decay(0.1, global_step, 1, 0.96, staircase=True) #生成学习率
learning_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(....., global_step=global_step) #使用指数衰减学习率
实例代码:
TRAINING_STEPS = 100
global_step = tf.Variable(0)
LEARNING_RATE = tf.train.exponential_decay(
0.1, global_step, 1, 0.96, staircase=True)
x = tf.Variable(tf.constant(5, dtype=tf.float32), name="x")
y = tf.square(x)
train_op = tf.train.GradientDescentOptimizer(LEARNING_RATE).minimize(
y, global_step=global_step)
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(TRAINING_STEPS):
sess.run(train_op)
if i % 10 == 0:
LEARNING_RATE_value = sess.run(LEARNING_RATE)
x_value = sess.run(x)
print("After %s iteration(s): x%s is %f, learning rate is %f." %
(i + 1, i + 1, x_value, LEARNING_RATE_value))
关于global_step的探究:
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/137629.html原文链接:https://javaforall.cn