AI学习之路(17): TensorFlow优化器2
来源:互联网 发布:改键盘 软件 编辑:程序博客网 时间:2024/06/03 17:43
tf.train.Optimizer.__init__(use_locking, name)
优化器的构造函数,用来创建一个新的优化器。
参数:
use_locking: 布尔类型Bool.如果设置为真可以防止别的异步操作更新这些变量。
name: 非空字符串。优化器的名称。
异常:
ValueError: 如果名称错误抛出此异常.
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)
调用函数计算梯度让损失函数最小化,同时更新梯度到变量列表。
这个函数简单地组合函数compute_gradients()和apply_gradients()的功能,如果你想分离处理这个过程,需要分开调用这两个函数。
参数:
loss: 一个包含计算最小化的张量。
global_step: 可选,当变量更新一个之后增加一步。
var_list: 用来计算损失函数的变量列表,可选类型,默认是使用 GraphKeys.TRAINABLE_VARIABLES里的变量.
gate_gradients: 计算梯度的方式: GATE_NONE, GATE_OP, or GATE_GRAPH.
aggregation_method: 指定组合计算梯度的参数,在类AggregationMethod里有效.
colocate_gradients_with_ops: 如果设置为True,尽量使用相应的op来计算相应梯度。
name: 可选,本操作的名称。
grad_loss: 可选,保存损失函数计算出来的梯度值。
返回:
定义一个操作来更新变量列表。如果global_step非None时,也许会多增加global_step操作.
异常:
ValueError: 如果变量不是有效的对象时抛出异常。
tf.train.Optimizer.compute_gradients(loss, var_list=None, gate_gradients=1, aggregation_method=None, colocate_gradients_with_ops=False, grad_loss=None)
从变量列表var_list里计算梯度的损失值.
它是minimize()函数第一部分调用的函数,返回 (gradient, variable)元组的列表,表示变量对应的梯度。值得注意是这里的梯度可能是张量,或者IndexedSlices,或者当没有梯度时是None值。.
参数:
loss: 包含计算最优化的张量。
var_list: 可选,用来计算最优化的变量列表.默认是使用图集里的GraphKey.TRAINABLE_VARIABLES变量列表.
gate_gradients: 计算梯度的方式: GATE_NONE, GATE_OP, or GATE_GRAPH。
aggregation_method: 指定组合计算梯度的参数,在类AggregationMethod里有效.
colocate_gradients_with_ops: 如果设置为True,尽量使用相应的op来计算相应梯度。
grad_loss: 可选,保存损失函数计算出来的梯度值。
返回值:
返回元组(gradient, variable)对的列表. Variable问题存在的,但gradient梯度就有可能为空 None.
异常:
TypeError: 如果var_list列表包括非变量对象时。
ValueError: 如果一些参数设置无效。
tf.train.Optimizer.apply_gradients(grads_and_vars, global_step=None, name=None)
应用梯度到变量。
这是函数minimize()的第二部分内容.它返回一个应用梯度的操作。
参数:
grads_and_vars:梯度列表 (gradient, variable),它是从函数compute_gradients()返回.
global_step: 可选,当变量更新之后增加1.
name: 可选名称,定义操作的名称,默认是构造优化器的名称。
返回值:
应用梯度到变量的操作。
异常:
TypeError: 如果grads_and_vars 出错.
ValueError: 如果有梯度出现空值。
梯度传送方式
函数minimize()和compute_gradients()都 接受一个参数gate_gradients来控制梯度的传送方式,主要指它的并行传送的方式。
主要有以下三种方式:GATE_NONE, GATE_OP,和 GATE_GRAPH.
GATE_NONE: 计算和应用梯度是完全并行的,提供了最大的并行性。
GATE_OP: 每一个操作之前都确认梯度计算完成才执行下一个操作,这样可以防止相互之间有依赖性的梯度计算。
GATE_GRAPH: 在应用梯度之前必须计算完成所有梯度,这样并行性是最差的方式,不过这种方式可以确保你在使用所有梯度时都是计算完成的。
跟踪点
有一些优化器MomentumOptimizer 和 AdagradOptimizer会分配和管理一些额外的变量,这些变量用来跟踪训练过程的。因此把这些跟踪训练过程的变量叫做跟踪点,这些跟踪点定义有名称,可以从这些优化器里获取这些名称,并且使用它,把它打印出来,这对于调试训练过程的算法是非常有用的。
tf.train.Optimizer.get_slot_names()
返回优化器创建跟踪点的名称。
返回值:
一个字符串列表。
tf.train.Optimizer.get_slot(var, name)
查看名称name的跟踪点。
有一些优化器会添加变量,比如Momentum和Adagrad优化器使用变量来加速累加。如果你需要使用,可以通过名称来访问这些变量。
参数:
var: 传送给函数minimize() 或 apply_gradients()的变量.
name: 字符串对象.
返回值:
从名称查找到跟踪点返回,如果没有返回None.
其它方法:tf.train.Optimizer.get_name()
class tf.train.GradientDescentOptimizer
实现了一个梯度下降算法的优化器。
tf.train.GradientDescentOptimizer.__init__(learning_rate, use_locking=False, name='GradientDescent')
构造函数,用来构造一个梯度下降算法的优化器。
参数:
learning_rate: 一个张量或者浮点数,表示学习的速率。
use_locking: 如果为True使用锁来锁住后进行更新操作。
name: 操作过程的名称,默认是"GradientDescent"。
tf.global_variables_initializer()
返回一个初始化全局变量的操作。它的内部实现是简单调用 variable_initializers(global_variables())实现。
返回值:
在图里初始化全局变量的操作。
1. C++标准模板库从入门到精通
http://edu.csdn.net/course/detail/3324
2.跟老菜鸟学C++
3. 跟老菜鸟学python
4. 在VC2015里学会使用tinyxml库
5. 在Windows下SVN的版本管理与实战
http://edu.csdn.net/course/detail/2579
6.Visual Studio 2015开发C++程序的基本使用
http://edu.csdn.net/course/detail/2570
7.在VC2015里使用protobuf协议
8.在VC2015里学会使用MySQL数据库
- AI学习之路(17): TensorFlow优化器2
- AI学习之路(16): TensorFlow优化器1
- AI学习之路(1):TensorFlow在Windows安装
- AI学习之路(4): TensorFlow是什么
- AI学习之路(2):GPU版本的Tensorflow在Windows上安装
- AI学习之路(19)TensorFlow里的矩阵乘法
- TensorFlow学习(四):优化器Optimizer
- TensorFlow学习(四):优化器Optimizer
- TensorFlow学习(四):优化器Optimizer
- AI学习之路(10): 张量的常量2
- AI学习之路(12): 创建随机张量2
- AI学习之路(一)
- 吴恩达Coursera深度学习课程 DeepLearning.ai 编程作业——Tensorflow+tutorial(2-3)
- TensorFlow学习之路
- TensorFlow学习之路
- AI学习之路(3): 牛刀小试之线性回归
- TensorFlow深度学习优化器Optimizer
- AI学习之路(5): NumPy是什么
- bzoj1006 最小生成树计数
- My story of programming learning
- Linux基础——创建和删除用户
- JavaScript 函数总体概述(函数声明/参数传递/返回值/加载/变量和作用域/变量声明提升/匿名函数/回调函数)
- 牛的旅行
- AI学习之路(17): TensorFlow优化器2
- C++的虚继承
- android studio异常处理方式
- 兰顿蚂蚁
- 数据库优化之结构优化
- HDU 2000 JAVA
- websocket协议简介
- Duet Display在PC端无法连接怎么办?
- 矩阵翻硬币(C++)