一、TensorFlow中的优化器

  1. tf.train.GradientDescentOptimizer:梯度下降算法
  2. tf.train.AdadeltaOptimizer
  3. tf.train.AdagradOptimizer
  4. tf.train.MomentumOptimizer:动量梯度下降算法
  5. tf.train.AdamOptimizer:自适应矩估计优化算法
  6. tf.train.RMSPropOptimizer
  7. tf.train.AdagradDAOptimizer
  8. tf.train.FtrlOptimizer
  9. tf.train.ProximalGradientDescentOptimizer
  10. tf.train.ProximalAdagradOptimizertf.train.RMSProOptimizer

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

https://blog.csdn.net/winycg/article/details/79363169

二、常用的种类:

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)

 __init__(

     learning_rate,

     use_locking=False,

     name='GradientDescent'

 )

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)

 __init__(

     learning_rate,

     momentum,

     use_locking=False,

     name='Momentum',

     use_nesterov=False

 )

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

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

use_locking: 为True时锁定更新

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

use_nesterov:  为True时,使用 Nesterov Momentum.

6、tf.train.RMSPropOptimizer

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

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

应用:

 __init__(

     learning_rate=0.001,

     beta1=0.9,

     beta2=0.999,

     epsilon=1e-08,

     use_locking=False,

     name='Adam'

 )

构造函数: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".

莫烦大大TensorFlow学习笔记(8)----优化器的更多相关文章

  1. 莫烦大大TensorFlow学习笔记(9)----可视化

      一.Matplotlib[结果可视化] #import os #os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' import tensorflow as tf i ...

  2. 莫烦python教程学习笔记——总结篇

    一.机器学习算法分类: 监督学习:提供数据和数据分类标签.--分类.回归 非监督学习:只提供数据,不提供标签. 半监督学习 强化学习:尝试各种手段,自己去适应环境和规则.总结经验利用反馈,不断提高算法 ...

  3. 莫烦python教程学习笔记——保存模型、加载模型的两种方法

    # View more python tutorials on my Youtube and Youku channel!!! # Youtube video tutorial: https://ww ...

  4. 莫烦python教程学习笔记——validation_curve用于调参

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  5. 莫烦python教程学习笔记——learn_curve曲线用于过拟合问题

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  6. 莫烦python教程学习笔记——利用交叉验证计算模型得分、选择模型参数

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  7. 莫烦python教程学习笔记——数据预处理之normalization

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

  8. 莫烦python教程学习笔记——线性回归模型的属性

    #调用查看线性回归的几个属性 # Youtube video tutorial: https://www.youtube.com/channel/UCdyjiB5H8Pu7aDTNVXTTpcg # ...

  9. 莫烦python教程学习笔记——使用波士顿数据集、生成用于回归的数据集

    # View more python learning tutorial on my Youtube and Youku channel!!! # Youtube video tutorial: ht ...

随机推荐

  1. NYIST 99 单词拼接

    单词拼接时间限制:3000 ms | 内存限制:65535 KB难度:5 描述给你一些单词,请你判断能否把它们首尾串起来串成一串.前一个单词的结尾应该与下一个单词的道字母相同.如 aloha dog ...

  2. Something about 博弈(POJ 3922 A simple stone game)

    先是题目,本来是第三次训练的题,在这特别提出来讲. 先是题目: E - A simple stone game Time Limit:1000MS     Memory Limit:65536KB   ...

  3. [Codeup 25482]选美

    [Codeup 25482 ]选美 题目 一年一度的星哥选美又拉开了帷幕 N个人报名参加选拔,每个人都有着各自的相貌参数和身材参数(不大于 10000 的正整数).你的任务是尽可能让更多人被星哥选中, ...

  4. uva 11624

    #include<stdio.h> #include<string.h> #include<queue> using namespace std; #define ...

  5. fzu 2132

    #include<stdio.h> double h; double tt; void s(long long m,long long n) { long long i,j,sum; j= ...

  6. 0223实战:MySQL Sending data导致查询很慢的问题详细分析

    转自博客http://blog.csdn.net/yunhua_lee/article/details/8573621 [问题现象] 使用sphinx支持倒排索引,但sphinx从mysql查询源数据 ...

  7. HDU 4515

    刷水完毕,年月日,日日日日日日日日日日日日日日日日日日 #include <stdio.h> ,,,,,,,,,,,,}; ,M = ,D = ; int leap(int y) { == ...

  8. 关于JOS 未对全部内存分页映射之前 物理地址映射问题的思考

    在kern/pmap.c 里面会又以下这段代码,要知道boot_alloc只会分配线性地址,真正建立虚拟页和物理页映射关系的在后面的page_alloc. ////////////////////// ...

  9. 【剑指Offer学习】【面试题34:丑数】

    题目:我们把仅仅包括因子2.3 和5 的数称作丑数(Ugly Number).求从小到大的顺序的第1500个丑数. 举例说明: 比如6.8 都是丑数.但14 不是.它包括因子7.习惯上我们把1 当做第 ...

  10. 打破传统天价SAP培训,开创SAP师徒之路,经验丰富的老顾问带徒弟 qq群150104068

    SAP领航社区,开设了一个导师性质的师徒圈子,类似大学导师带研究生,导师给学生安排课题.分配任务.分享资料,让学生自学提高.我们的教学方法是以自学为主.辅导为辅助,在实践中积累经验掌握原理.主要方向A ...