tensorflow-优化器
优化器可以通俗的理解成梯度下降那一套流程。
梯度下降
基本流程
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-优化器的更多相关文章
- TensorFlow从0到1之TensorFlow优化器(13)
高中数学学过,函数在一阶导数为零的地方达到其最大值和最小值.梯度下降算法基于相同的原理,即调整系数(权重和偏置)使损失函数的梯度下降. 在回归中,使用梯度下降来优化损失函数并获得系数.本节将介绍如何使 ...
- TensorFlow优化器及用法
TensorFlow优化器及用法 函数在一阶导数为零的地方达到其最大值和最小值.梯度下降算法基于相同的原理,即调整系数(权重和偏置)使损失函数的梯度下降. 在回归中,使用梯度下降来优化损失函数并获得系 ...
- tensorflow优化器-【老鱼学tensorflow】
tensorflow中的优化器主要是各种求解方程的方法,我们知道求解非线性方程有各种方法,比如二分法.牛顿法.割线法等,类似的,tensorflow中的优化器也只是在求解方程时的各种方法. 比较常用的 ...
- TensorFlow优化器浅析
本文基于tensorflow-v1.15分支,简单分析下TensorFlow中的优化器. optimizer = tf.train.GradientDescentOptimizer(learning_ ...
- DNN网络(三)python下用Tensorflow实现DNN网络以及Adagrad优化器
摘自: https://www.kaggle.com/zoupet/neural-network-model-for-house-prices-tensorflow 一.实现功能简介: 本文摘自Kag ...
- Tensorflow 中的优化器解析
Tensorflow:1.6.0 优化器(reference:https://blog.csdn.net/weixin_40170902/article/details/80092628) I: t ...
- tensorflow的几种优化器
最近自己用CNN跑了下MINIST,准确率很低(迭代过程中),跑了几个epoch,我就直接stop了,感觉哪有问题,随即排查了下,同时查阅了网上其他人的blog,并没有发现什么问题 之后copy了一篇 ...
- 莫烦大大TensorFlow学习笔记(8)----优化器
一.TensorFlow中的优化器 tf.train.GradientDescentOptimizer:梯度下降算法 tf.train.AdadeltaOptimizer tf.train.Adagr ...
- TensorFlow使用记录 (六): 优化器
0. tf.train.Optimizer tensorflow 里提供了丰富的优化器,这些优化器都继承与 Optimizer 这个类.class Optimizer 有一些方法,这里简单介绍下: 0 ...
- Tensorflow 2.0 深度学习实战 —— 详细介绍损失函数、优化器、激活函数、多层感知机的实现原理
前言 AI 人工智能包含了机器学习与深度学习,在前几篇文章曾经介绍过机器学习的基础知识,包括了监督学习和无监督学习,有兴趣的朋友可以阅读< Python 机器学习实战 >.而深度学习开始只 ...
随机推荐
- 部署--云服务器(RubyChina上的转帖); 附加用cap部署sidekiq
https://ruby-china.org/topics/36899 附加https://ruby-china.org/topics/36899 Capistrano + Rails5.2部署 使用 ...
- day11 - 15(装饰器、生成器、迭代器、内置函数、推导式)
day11:装饰器(装饰器形成.装饰器作用.@语法糖.原则.固定模式) 装饰器形成:最简单的.有返回值的.有一个参数的.万能参数 函数起的作用:装饰器用于在已经完成的函数前后增加功能 语法糖:使代码变 ...
- 数据库连接的WEB登录界面的实现
要实现此功能,需要电脑安装JAVA EE.SQL Server 2008和Tomcat等软件,并进行配置环境成功. 对这门课的希望和自己的目标: 希望:可以完全掌握老师所讲的内容. 目标:能够完整的做 ...
- 使用org.apache.poi导出Excel表格
public HSSFWorkbook MakeExcel(List<TransactionLogVO> logList) { // SimpleDateFormat sdf = new ...
- Oracle数据库,数字强制显示2位小数
在银行.财务等对数字要求敏感的系统中,数字的显示一般有着严格的要求.今遇到一个需求,如题,要求将数字以两位小数的格式显示,如果没有小数,则强制显示为0.例如:123.4 显示为 123.4012 ...
- log4j的一些参数说明
参数 说明 例子 %c 列出logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间 log4j配置文件参数举例 输出显示媒介 假设当前logger名字空间 ...
- Linux下的Nginx的配置+Tomcat启动
Linux下的Nginx的配置 首次如果你只仅主机模式,那么请你切换到桥接模式或者net模式. 1.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc ...
- OpenSSH隐藏版本号教程
1.查看当前OpenSSH版本号 sshd -v #sshd并没有-v选项,这并不是重点重点是这样能曝出版本号 2.查看sshd位置 which sshd 3.备份sshd cp /usr/sbin/ ...
- 转【面向代码】学习 Deep Learning(二)Deep Belief Nets(DBNs)
[面向代码]学习 Deep Learning(二)Deep Belief Nets(DBNs) http://blog.csdn.net/dark_scope/article/details/9447 ...
- ubuntu中更新.netcore到2.1版本
如果需要安装新版本到dotnetcore,需要先卸载旧版本(https://github.com/dotnet/core/blob/master/release-notes/download-arch ...