优化器可以通俗的理解成梯度下降那一套流程。

梯度下降

基本流程

a. 损失函数

b. 求导,计算梯度

c. 更新参数

d. 迭代下一批样本

可以对照着理解tf。

tf 优化器

正常使用流程

a. 创建优化器(也就是选择优化方法,只是选择方法,其他什么也没做)

b. 指定损失函数和可优化参数

c. minimize最小化损失函数,这步包含两个操作,首先计算梯度,然后更新参数

以tf基本优化器,也就是梯度下降为例

optimizer = tf.train.GradientDescentOptimizer(learning_rate)      # 优化器
global_step = tf.Variable(0, name='global_step', trainable=False)  # 记录全局训练步骤
train_op = optimizer.minimize(loss, global_step=global_step)     # 最小化损失函数,包括计算梯度,更新参数,记录训练次数

注意tf中学习率可以是tensor, 也就是说它可被feed。

tf 人工实现梯度下降

a. 计算梯度

b. 人工处理梯度

c. 优化参数

也就是把minimize拆开

# 创建一个optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1) # 计算<list of variables>相关的梯度
grads_and_vars = opt.compute_gradients(loss, <list of variables>)
# grads_and_vars为tuples (gradient, variable)组成的列表。
#对梯度进行想要的处理,比如cap处理
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars] # 令optimizer运用capped的梯度(gradients)
opt.apply_gradients(capped_grads_and_vars)

优化器API详解

API 描述
tf.train.Optimizer

tf中优化器是个家族,Optimizer是个基类,一般不用

用的是它的子类

GradientDescentOptimizer, AdagradOptimizer,MomentumOptimizer等等

tf.train.Optimizer.__init__(use_locking, name)  初始化

tf.train.Optimizer.minimize(loss,

global_step=None,

var_list=None,

gate_gradients=1,

aggregation_method=None, colocate_gradients_with_ops=False,

name=None, grad_loss=None)

最小化损失函数,返回更新后的参数列表

global_step 为迭代次数,如果不为None,它的值会自增

var_list 为参数列表,

此步包含计算梯度和更新参数两步,也就是下面两个API

tf.train.Optimizer.compute_gradients(loss,

var_list=None,

gate_gradients=1, aggregation_method=None,

colocate_gradients_with_ops=False, grad_loss=None)

计算梯度,只是求导,没做其他的,返回(梯度,变量)的tuples

loss是损失函数

var_list 是参数列表,基于loss对这些参数求导

其他版本 tf.gradients

tf.train.Optimizer.apply_gradients(grads_and_vars,

global_step=None,

name=None)

将梯度应用到变量上,更新参数,

返回一个应用指定梯度的操作Operation,并对global_step做自增操作

tf.train.Optimizer.get_name()  获取名称

并发性参数

调试函数(高级API)

子类优化器

tf.train.GradientDescentOptimizer    梯度下降

tf.train.MomentumOptimizer        动量梯度下降

tf.train.AdadeltaOptimizer

tf.train.AdagradOptimizer

tf.train.AdamOptimizer

tf.train.FtrlOptimizer

tf.train.RMSPropOptimizer

参考资料

http://www.cnblogs.com/hellcat/p/7041433.html

http://www.360doc.com/content/18/0505/10/54605916_751286822.shtml

https://www.cnblogs.com/wuzhitj/p/6648641.html

https://blog.csdn.net/hustqb/article/details/80302726

tensorflow-优化器的更多相关文章

  1. TensorFlow从0到1之TensorFlow优化器(13)

    高中数学学过,函数在一阶导数为零的地方达到其最大值和最小值.梯度下降算法基于相同的原理,即调整系数(权重和偏置)使损失函数的梯度下降. 在回归中,使用梯度下降来优化损失函数并获得系数.本节将介绍如何使 ...

  2. TensorFlow优化器及用法

    TensorFlow优化器及用法 函数在一阶导数为零的地方达到其最大值和最小值.梯度下降算法基于相同的原理,即调整系数(权重和偏置)使损失函数的梯度下降. 在回归中,使用梯度下降来优化损失函数并获得系 ...

  3. tensorflow优化器-【老鱼学tensorflow】

    tensorflow中的优化器主要是各种求解方程的方法,我们知道求解非线性方程有各种方法,比如二分法.牛顿法.割线法等,类似的,tensorflow中的优化器也只是在求解方程时的各种方法. 比较常用的 ...

  4. TensorFlow优化器浅析

    本文基于tensorflow-v1.15分支,简单分析下TensorFlow中的优化器. optimizer = tf.train.GradientDescentOptimizer(learning_ ...

  5. DNN网络(三)python下用Tensorflow实现DNN网络以及Adagrad优化器

    摘自: https://www.kaggle.com/zoupet/neural-network-model-for-house-prices-tensorflow 一.实现功能简介: 本文摘自Kag ...

  6. Tensorflow 中的优化器解析

    Tensorflow:1.6.0 优化器(reference:https://blog.csdn.net/weixin_40170902/article/details/80092628) I:  t ...

  7. tensorflow的几种优化器

    最近自己用CNN跑了下MINIST,准确率很低(迭代过程中),跑了几个epoch,我就直接stop了,感觉哪有问题,随即排查了下,同时查阅了网上其他人的blog,并没有发现什么问题 之后copy了一篇 ...

  8. 莫烦大大TensorFlow学习笔记(8)----优化器

    一.TensorFlow中的优化器 tf.train.GradientDescentOptimizer:梯度下降算法 tf.train.AdadeltaOptimizer tf.train.Adagr ...

  9. TensorFlow使用记录 (六): 优化器

    0. tf.train.Optimizer tensorflow 里提供了丰富的优化器,这些优化器都继承与 Optimizer 这个类.class Optimizer 有一些方法,这里简单介绍下: 0 ...

  10. Tensorflow 2.0 深度学习实战 —— 详细介绍损失函数、优化器、激活函数、多层感知机的实现原理

    前言 AI 人工智能包含了机器学习与深度学习,在前几篇文章曾经介绍过机器学习的基础知识,包括了监督学习和无监督学习,有兴趣的朋友可以阅读< Python 机器学习实战 >.而深度学习开始只 ...

随机推荐

  1. 2-sat学习笔记

    前后缀建图 例:要求n个变量满足至多有1个为true. 暴力:一个点的true向其它n-1个点的false连边,复杂度O(n^2). 正解:prei表示前i个点是否有真. prei的true向prei ...

  2. windows系统文件和linux系统文件

    windows系统文件和linux系统文件 1.单用户操作系统和多用户操作系统 单用户操作系统:指一台计算机在同一时间 只能由一个用户 使用,一个用户独自享用系统的全部硬件和软件资源 Windows ...

  3. 笔记react router 4(三)

    上一篇我们说到了路由组件的嵌套.想必你已经运用自如了.那么,这一次我们来聊一聊4.X中Router的变更. 在3.X中我们若使用路由的模式,可通过在Router上配置history的值即可. 例如, ...

  4. SpringBoot项目Shiro的实现(二)

    在看此小节前,您可能需要先看:http://www.cnblogs.com/conswin/p/7478557.html 紧接上一篇,在上一篇我们简单实现了一个Springboot的小程序,但我们发现 ...

  5. vue 关于npm run build 的小问题

    vue项目使用npm run build命令进行打包操作,打包之后试运行报错,报错为: 且命令行警告信息为: 解决办法: 找到项目目录下的config文件夹里的index.js文件,将build对象下 ...

  6. 22. Generate Parentheses C++回溯法

    把左右括号剩余的次数记录下来,传入回溯函数. 判断是否得到结果的条件就是剩余括号数是否都为零. 注意判断左括号是否剩余时,加上left>0的判断条件!否则会memory limited erro ...

  7. iOS runtime实用篇--和常见崩溃say good-bye!

    程序崩溃经历 其实在很早之前就想写这篇文章了,一直拖到现在. 程序崩溃经历1 我们公司做的是股票软件,但集成的是第三方的静态库(我们公司和第三方公司合作,他们提供股票的服务,我们付钱).平时开发测试的 ...

  8. WebGoat 8安装、配置、使用教程(CentOS)

    一.说明 1.1 背景说明 之前只用过dvwa,听说WebGoat也是类似的平台后,想装来试试有没有什么异同. 看了下载文件,和网上官方的.非官方的安装教程,感觉很多都对不上: 最后发现WebGoat ...

  9. weblogic CVE-2017-10271修复教程

    1.简介 CVE-2017-10271是weblogic wls-wsat组件的一个xml反序列化漏洞,可造成远程命令执行.更详细分析可见参考链接,本文强调在进行参考链接修复中的一些细节. 2.影响版 ...

  10. linux 程序实现后台运行

    先上代码: getopt函数获取参数  -d 控制台控制运行  -D 后天运行  -h 调用show_help函数. 编译命令 gcc -g -W test.c -o test 注意后台运行 ./te ...