AI学习之路(17): TensorFlow优化器2

3/8/2017来源:ASP.NET技巧人气:5065

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++

http://edu.csdn.net/course/detail/2901

3. 跟老菜鸟学python

http://edu.csdn.net/course/detail/2592

4. 在VC2015里学会使用tinyxml

http://edu.csdn.net/course/detail/2590

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协议

http://edu.csdn.net/course/detail/2582

8.在VC2015里学会使用MySQL数据库

http://edu.csdn.net/course/detail/2672