-
简介:
- TensorFlow的optimizer类下的子类,属于优化器。实现的是梯度下降算法。
-
参数
-
__init__( learning_rate, use_locking=False, name='GradientDescent' )
-
GradientDescentOptimizer初始化方法中包含三个参数
- name:优化器名字
- learning_rate: 学习率,控制参数的更新速度。过大过小都会影响算法的运算时间和结果,过大容易发散,过小运算时间太长。
- use_locking: 默认False。变量允许并发读写操作,若为true则防止对变量的并发更新。
-
其中最重要的就是学习率
-
学习率(learning_rate)变化的方法可采用指数衰减法-封装方法为:
-
tf.train.exponential_decay( learning_rate, global_step, decay_steps, decay_rate, staircase=False, name=None )
-
指数衰减算法原理:
-
d e c a y e d _ l e a r n i n g _ r a t e = l e a r n i n g _ r a t e ⋅ d e c a y e d _ r a t e g l o b a l _ s t e p / d e c a y e d _ s t e p s decayed\_learning\_rate=learning\_rate\cdot decayed\_rate^{global\_step/decayed\_steps} decayed_learning_rate=learning_rate⋅decayed_rateglobal_step/decayed_steps
-
根据global_step增加,实现learning_rate呈指数衰减.
-
staircase字段提供了不同的衰减方式,当staircase = True 时候 global_step / decay_steps 为整数除法,衰减学习率服从阶梯函数。
-
-
-
-
核心方法:
-
minimize( loss, global_step=None, var_list=None, gate_gradients=GATE_OP, aggregation_method=None, colocate_gradients_with_ops=False, name=None, grad_loss=None )
-
主要的两个参数
- loss:构造优化的损失函数,类型Tensor
- global_step:通常于学习率变化一起使用,可选变量,在变量更新后增加1。
-
-
示例:
-
global_step = tf.Variable(0) decay_steps = 100 decay_rate= 0.9 learning_rate = tf.train.exponential_decay(0.01,global_step,decay_steps,decay_rate,staircase = True,name = 'demo') train_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(loss, global_step = global_step)
设置自适应学习率
- 初始化:
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
mse = tf.reduce_mean(tf.square(out - out_))
train_step = tf.train.GradientDescentOptimizer(0.3).minimize(mse)
-
方式一(最佳):
learning_rate = tf.placeholder(tf.float32, shape=[]) # ... train_step = tf.train.GradientDescentOptimizer( learning_rate=learning_rate).minimize(mse) sess = tf.Session() # Feed different values for learning rate to each training step. sess.run(train_step, feed_dict={learning_rate: 0.1}) sess.run(train_step, feed_dict={learning_rate: 0.1}) sess.run(train_step, feed_dict={learning_rate: 0.01}) sess.run(train_step, feed_dict={learning_rate: 0.01})
首先,tf.train.GradientDescentOptimizer旨在对所有步骤中的所有变量使用恒定的学习率。 TensorFlow还提供现成的自适应优化器,包括tf.train.AdagradOptimizer和tf.train.AdamOptimizer,这些可以作为随时可用的替代品。
但是,如果要通过其他普通渐变下降控制学习速率,则可以利用以下事实:tf.train.GradientDescentOptimizer构造函数的learning_rate参数可以是Tensor对象。这允许您在每个步骤中为学习速率计算不同的值。 -
方式二(次之):
- 上面示例所用的tf.train.exponential_decay。