您当前的位置: 首页 > 

静静喜欢大白

暂无认证

  • 1浏览

    0关注

    521博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【优化器】

静静喜欢大白 发布时间:2020-08-18 17:48:26 ,浏览量:1

转载https://blog.csdn.net/qq_32172681/article/details/94627366

训练过程中的本质就是在最小化损失,在定义损失之后,接下来就是训练网络参数了,优化器可以让神经网络更快收敛到最小值。

本文介绍几种 tensorflow 常用的优化器函数。

 

1、GradientDescentOptimizer

梯度下降算法需要用到全部样本,训练速度比较慢。


 
  1. tf.train.GradientDescentOptimizer(
  2. learning_rate,
  3. use_locking=False,
  4. name="GradientDescent"
  5. )

 

2、AdagradOptimizer

自适应学习率,加入一个正则化项 ,对学习率进行约束,前期学习率小的时候,正则化项大,能够放大梯度;后期,学习率大的时候,正则化项大,可以减少梯度,适合处理稀疏数据。缺点:依赖于全局学习率。


 
  1. tf.train.AdagradOptimizer(
  2. learning_rate, # 学习率
  3. initial_accumulator_value=FLAGS.adagrad_initial_accumulator_value, # 累计初始值
  4. use_locking=False,
  5. name="Adagrad"
  6. )

 

3、AdadeltaOptimizer

Adadelta和Adagrad一样,都是自适应学习率,它是对Adagrad的改进,在计算上有所区别,Adagrad累加梯度的平方,依赖于全部学习率,而Adadelta加固定大小的值,不依赖于全局学习率。


 
  1. tf.train.AdadeltaOptimizer(
  2. learning_rate, # 学习率
  3. rho=FLAGS.adadelta_rho, # 衰减率
  4. epsilon=FLAGS.opt_epsilon, # 用于更好的调节梯度更新的常量
  5. use_locking=False, # 若为True,锁住更新操作
  6. name="Adadelta" # 操作名
  7. )

 

4、RMSPropOptimizer

它是Adagrad的改进、Adadelta的变体,仍然依赖于全局学习率,效果位于两者之间,对于RNN效果较好。


 
  1. tf.train.RMSPropOptimizer(
  2. learning_rate,
  3. decay=FLAGS.rmsprop_decay, # 梯度的系数
  4. momentum=FLAGS.rmsprop_momentum, # 动量
  5. epsilon=FLAGS.opt_epsilon, # 用于更好的调节梯度更新的常量
  6. use_locking=False,
  7. centered=False, # 如果为True,则通过梯度的估计方差对梯度进行归一化
  8. name="RMSProp"
  9. )

 

5、MomentumOptimizer

就像物理上的动量一样,梯度大的时候,动量大,梯度小的时候,动量也会变小,能够更加平稳、快速地冲向局部最小点。


 
  1. tf.train.MomentumOptimizer(
  2. learning_rate, # 学习率
  3. momentum=FLAGS.momentum, # 动量
  4. use_locking=False,
  5. name='Momentum',
  6. use_nesterov=False # 若为True,则使用Nesterov动量
  7. )

 

6、AdamOptimizer

可以看作是带有Momentum的RMSProp,可以将学习率控制在一定范围内,参数较平稳。


 
  1. tf.train.AdamOptimizer(
  2. learning_rate, # 学习率
  3. beta1=FLAGS.adam_beta1, # 一阶矩估计衰减率
  4. beta2=FLAGS.adam_beta2, # 二阶矩估计衰减率
  5. epsilon=FLAGS.opt_epsilon, # 用于更好的调节梯度更新的常量
  6. use_locking=False,
  7. name="Adam"
  8. )

 

7、FtrlOptimizer

FTRL 就是正则项为0的SGD算法。


 
  1. tf.train.FtrlOptimizer(
  2. learning_rate, # 学习率
  3. learning_rate_power=FLAGS.ftrl_learning_rate_power, # 控制训练期间学习率衰减方式
  4. initial_accumulator_value=FLAGS.ftrl_initial_accumulator_value, # 累计器初始值
  5. l1_regularization_strength=FLAGS.ftrl_l1, # L1正则化系数
  6. l2_regularization_strength=FLAGS.ftrl_l2, # L2正则化系数
  7. use_locking=False,
  8. name="Ftrl",
  9. accum_name=None,
  10. linear_name=None,
  11. l2_shrinkage_regularization_strength=0.0 # 惩罚项
  12. )

 

 

 

 

关注
打赏
1510642601
查看更多评论
立即登录/注册

微信扫码登录

0.0372s