TensorFlow优化器GradientDescentOptimizer()函数

  • 简介:
    • 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_ratedecayed_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。
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值