博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
莫烦大大TensorFlow学习笔记(8)----优化器
阅读量:6876 次
发布时间:2019-06-26

本文共 3152 字,大约阅读时间需要 10 分钟。

一、TensorFlow中的优化器

  1. :动量梯度下降算法
  2. :自适应矩估计优化算法
  3. tf.train.AdagradDAOptimizer
  4. tf.train.FtrlOptimizer
  5. tf.train.ProximalGradientDescentOptimizer
  6. tf.train.ProximalAdagradOptimizertf.train.RMSProOptimizer

(1)如果数据是稀疏的,使用自适应学习方法。

(2)RMSprop,Adadelta,Adam是非常相似的优化算法,Adam的bias-correction帮助其在最后优化期间梯度变稀疏的情况下略微战胜了RMSprop。整体来讲,Adam是最好的选择。
(3)很多论文中使用vanilla SGD without momentum。SGD通常能找到最小值,但是依赖健壮的初始化,并且容易陷入鞍点。因此,如果要获得更快的收敛速度和训练更深更复杂的神经网络,需要选择自适应学习方法。

 

二、常用的种类:

1、tf.train.Optimizer:

class tf.train.Optimizer:优化器(optimizers)类的基类。
Optimizer基类提供了计算损失梯度的方法,并将梯度应用于变量。这个类定义了在训练模型的时候添加一个操作的API。你基本上不会直接使用这个类,但是你会用到他的子类比如GradientDescentOptimizer, AdagradOptimizer, MomentumOptimizer.等等这些。 

2、tf.train.GradientDescentOptimizer:梯度下降

原理:

  • batch GD【全部样本,速度慢】

  • 随机GD【随机一个样本,速度快,但局部最优】

  • mini-batch GD 【batch个样本,常在数据量较大时使用】

训练集样本数少【≤2000】:采用batchGD

训练集样本数多:采用mini-batch GD,batch大小一般为64-512. 训练时多尝试一下2的次方来找到最合适的batch大小。

 

 

这个类是实现梯度下降算法的优化器。这个构造函数需要的一个学习率就行了。

构造函数:tf.train.GradientDescentOptimizer(0.001).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)

1 __init__(2 3     learning_rate,4 5     use_locking=False,6 7     name='GradientDescent'8 9 )
View Code

learning_rate: (学习率)张量或者浮点数

use_locking: 为True时锁定更新

name: 梯度下降名称,默认为"GradientDescent".

 

3、tf.train.AdadeltaOptimizer:

实现了 Adadelta算法的优化器,可以算是下面的Adagrad算法改进版本。

构造函数: tf.train.AdadeltaOptimizer.init(learning_rate=0.001, rho=0.95, epsilon=1e-08, use_locking=False, name=’Adadelta’)

4、tf.train.AdagradOptimizer:

构造函数:tf.train.AdagradOptimizer.__init__(learning_rate, initial_accumulator_value=0.1, use_locking=False, name=’Adagrad’)

5、tf.train.MomentumOptimizer:

原理:

momentum表示要在多大程度上保留原来的更新方向,这个值在0-1之间,在训练开始时,由于梯度可能会很大,所以初始值一般选为0.5;当梯度不那么大时,改为0.9。 α是学习率,即当前batch的梯度多大程度上影响最终更新方向,跟普通的SGD含义相同。

应用:

构造函数:tf.train.MomentumOptimizer.__init__(learning_rate, momentum, use_locking=False, name=’Momentum’, use_nesterov=False)

1 __init__( 2  3     learning_rate, 4  5     momentum, 6  7     use_locking=False, 8  9     name='Momentum',10 11     use_nesterov=False12 13 )
View Code

learning_rate: (学习率)张量或者浮点数

momentum: (动量)张量或者浮点数

use_locking: 为True时锁定更新

name:  梯度下降名称,默认为 "Momentum".

use_nesterov:  为True时,使用 Nesterov Momentum.

 

6、tf.train.RMSPropOptimizer

目的和动量梯度一样,减小垂直方向,增大水平方向。W为水平方向,b为垂直方向。

 

 

7、tf.train.AdamOptimizer:动量和RMSProp结合

应用:

1 __init__( 2  3     learning_rate=0.001, 4  5     beta1=0.9, 6  7     beta2=0.999, 8  9     epsilon=1e-08,10 11     use_locking=False,12 13     name='Adam'14 15 )
View Code

构造函数:tf.train.AdamOptimizer.__init__(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name=’Adam’)

learning_rate: (学习率)张量或者浮点数,需要调试

beta1:  浮点数或者常量张量 ,表示 The exponential decay rate for the 1st moment estimates.【推荐使用0.9】

beta2:  浮点数或者常量张量 ,表示 The exponential decay rate for the 2nd moment estimates.【推荐使用0.999】

epsilon: A small constant for numerical stability. This epsilon is "epsilon hat" in the Kingma and Ba paper (in the formula just before Section 2.1), not the epsilon in Algorithm 1 of the paper.

use_locking: 为True时锁定更新

name:  梯度下降名称,默认为 "Adam".

 

 

 

转载于:https://www.cnblogs.com/Lee-yl/p/10022615.html

你可能感兴趣的文章
我的友情链接
查看>>
Linux常用的shell命令
查看>>
sybase备份与恢复及sybase常用语句
查看>>
JAVA操作json实战--获得天气预报信息
查看>>
Flink SQL解析Json格式数据的方法
查看>>
SpringBoot入门二,添加JdbcTemplate数据源
查看>>
如何成为架构师的建议
查看>>
代码生成器----xml自解析生成StringBuffer
查看>>
OVIRT重装恢复备份数据库练习
查看>>
centos java安装
查看>>
mysql 互为主从(主主)配置
查看>>
C#的初级知识小结6之类成员
查看>>
Oracle DBA面试题
查看>>
需要熟记的英语单词
查看>>
缓存服务器 之 Linux下缓存服务器的应用
查看>>
后台管理css模板
查看>>
桌面客户端
查看>>
exchange online 用户许可证迁移常见问题
查看>>
ELK调优
查看>>
mysql性能优化2
查看>>