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

梯度下降

基本流程

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. android -------- 解决NDK开发中的 Method 'NewStringUTF' could not be resolved

    创建NDK项目时, .cpp文件中出现错误, Method 'NewStringUTF' could not be resolved 如图: 网上看了很多解决方式 项目右键->属性->c/ ...

  2. Confluence 6 权限概述

    下面的权限可以指派给任何一个空间: 分类 权限 全部(All) 查看(View )给你能够查看空间内容的权限,包括有空间目录和其他的内容,例如主面板. 删除自己(Delete own) 给你权限删除你 ...

  3. bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 后缀自动机在tire树上拓展

    题意:有棵树每个点有个颜色(不超过10种),每个节点不超过20个儿子,问你每两点之间的颜色序列不同的有多少种 题解:先建出树,对于每个叶子节点,bfs一遍建在sam上,每次保留当前点在sam上的位置, ...

  4. acl使用示例

    declare   v_count  number;  uprinciple varchar2(20);  principle  varchar2(20);  begin uprinciple := ...

  5. docker 系列之 docker安装

    Docker支持以下的CentOS版本 CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 前提条件 目前,CentOS 仅发行版本中的内核支持 Docker. ...

  6. 解决maven 找不到指定路径应该如何

    如果打开每个项目都有红x!!!解决办法: 1) 2)-->点击clean ,ok!!

  7. E - Let's Go Rolling!

    题目描述:数轴上有nn个质点,第ii个质点的坐标为xixi,花费为cici,现在要选择其中一些点固定,代价为这些点的花费,固定的点不动,不固定的点会向左移动直至遇到固定的点,代价是这两点的距离,如果左 ...

  8. Oracle Log Block Size

    Although the size of redo entries is measured in bytes, LGWR writes the redo to the log files on dis ...

  9. Python面向对象之继承

    前言: 继承是面向对象的3大特性之一,对于继承一点要注意一下4点. 一.基本查找 如果子类继承了父类,子类的实例化对象,没有的方法和属性会去父类找 class Parent(object): #父类 ...

  10. PHP闭包函数

    # 提到闭包就不得不想起匿名函数,也叫闭包函数(closures),貌似PHP闭包实现主要就是靠它.声明一个匿名函数是这样: $func = function() { }; //带结束符 # 可以看到 ...