tensorflow优化器api

优化器
Optimizer基类提供了计算损失梯度和将梯度应用于变量的方法。一组子类实现了经典的优化算法,如GradientDescent和Adagrad。

你永远不会实例化Optimizer类本身,而是实例化其中一个子类。

class tf.train.Optimizer
优化器的基类。

该类定义API以添加Ops来训练模型。你从来没有直接使用这个类,而是实例及其子类为一体 GradientDescentOptimizer,AdagradOptimizer或MomentumOptimizer。

用法

# Create an optimizer with the desired parameters.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Add Ops to the graph to minimize a cost by updating a list of variables.
# "cost" is a Tensor, and the list of variables contains variables.Variable
# objects.
opt_op = opt.minimize(cost, <list of variables>)

用compute_gradients()。计算梯度。
按照您的意愿处理梯度。
应用处理后的梯度apply_gradients()。
例:

# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)

# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)

# grads_and_vars is a list of tuples (gradient, variable).  Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1])) for gv in grads_and_vars]

# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)

tf.train.Optimizer.init(use_locking, name)
创建一个新的优化器。

这必须由子类的构造函数调用。

ARGS:
use_locking:布尔。如果True应用使用锁定来防止对变量的并发更新。
name:非空字符串。用于为优化器创建的累加器的名称。
举:
ValueError:如果名称格式不正确。

-
tf.train.Optimizer.minimize(loss, global_step=None, var_list=None, gate_gradients=1, name=None)
通过更新’var_list’添加操作以最小化“损失”。

此方法简单地将调用compute_gradients()和apply_gradients()组合起来。如果要在应用梯度之前处理梯度,请显式调用compute_gradients()和apply_gradients(),而不要使用此函数。

ARGS:
loss:包含值最小化的张量。
global_step:可选变量在变量更新后按1递增。
var_list:可选的变量列表。可更新以最大程度地减少“损失”。默认为GraphKeys.TRAINABLE_VARIABLES下的图表中收集的变量列表。
gate_gradients:如何选择梯度的计算。可以是GATE_NONE,GATE_OP或GATE_GRAPH。
name:返回操作的可选名称。
返回:
更新’var_list’中的变量的操作。如果’global_step’不是None,那么该操作也会增加global_step。

举:
ValueError:如果某些变量不是变量。变量对象。

-
tf.train.Optimizer.compute_gradients(loss, var_list=None, gate_gradients=1)
为“var_list”中的变量计算“损失”的梯度。

这是minim()的第一部分。它返回(梯度,变量)对的列表,其中“gradient”是“变量”的梯度。请注意,如果给定变量没有梯度,则“梯度”可以是张量,IndexedSlices或None。

ARGS:
loss:包含值最小化的张量。
var_list:变量的可选列表。可以更新以最大程度地减少“损失”。默认为GraphKey.TRAINABLE_VARIABLES下的图表中收集的变量列表。
gate_gradients:如何选择梯度的计算。可以是GATE_NONE,GATE_OP或GATE_GRAPH。
返回:
(梯度,变量)对的列表。

举:
TypeError:如果var_list包含变量以外的任何变量。变量。
ValueError:如果一些参数无效。

-
tf.train.Optimizer.apply_gradients(grads_and_vars, global_step=None, name=None)
将梯度应用于变量。

这是minimize()的第二部分。它返回应用梯度的操作。

ARGS:
grads_and_vars:compute_gradients()返回的(梯度,变量)对的列表。
global_step:可选变量在变量更新后按1递增。
name:返回操作的可选名称。默认为传递给Optimizer构造函数的名称。
返回:
应用指定梯度的操作。如果’global_step’不是None,那么该操作也会增加global_step。

举:
TypeError:如果grads_and_vars格式不正确。

Gate gradients
二者minimize()并compute_gradients()接受gate_gradient控制并行性梯度的应用过程中的程度的参数。

可能的值是:GATE_NONE,GATE_OP,和GATE_GRAPH。

GATE_NONE:并行计算和应用梯度。这在执行过程中提供了最大的并行性,但是以结果中的某些不可重复性为代价。例如,MatMul的两个梯度取决于输入值:在计算其他梯度之前,GATE_NONE可以将其中一个梯度应用于其中一个输入,从而导致不可重现的结果。

GATE_OP:对于每个操作,确保在使用之前计算所有梯度。这可以防止为多个输入生成梯度的Ops竞争条件,其中梯度取决于输入。

GATE_GRAPH:确保在使用任何一个变量之前计算所有变量的所有梯度。这提供了最少的并行性,但如果要在应用任何梯度之前处理所有梯度,可能会很有用。

Slots
一些优化器子类,例如MomentumOptimizer和AdagradOptimizer 分配和管理与要训练的变量相关的附加变量。这些被称为插槽。插槽有名称,您可以向优化器询问它使用的插槽名称。一旦你有一个插槽名称,你可以向优化器询问它创建的变量以保存插槽值。

如果您想记录调试训练算法,报告关于插槽的统计信息等,这可能很有用。

tf.train.Optimizer.get_slot_names()
返回由优化器创建的插槽名称列表。

请参阅get_slot()。

返回:
字符串列表。

tf.train.Optimizer.get_slot(var, name)
返回由优化器为“var”创建的名为“name”的插槽。

一些优化器子类使用额外的变量。例如Momentum和Adagrad使用变量来累积更新。如果由于某种原因需要这些变量,则可以访问这些变量。

使用get_slot_names()获取由优化器创建的插槽名称列表。

ARGS:
var:传递给minimize()或apply_gradients()的变量。
name:一个字符串。
返回:
插槽的变量(如果已创建),否则无。

class tf.train.GradientDescentOptimizer
实现梯度下降算法的优化器。

tf.train.GradientDescentOptimizer.init(learning_rate, use_locking=False, name=’GradientDescent’)
构建一个新的梯度下降优化器。

ARGS:
learning_rate:张量或浮点值。学习速度使用。
use_locking:如果True使用锁定进行更新操作
name:应用梯度时创建的操作的可选名称前缀。默认为“梯度梯度”。

-
class tf.train.AdagradOptimizer
实现Adagrad算法的优化器。

tf.train.AdagradOptimizer.init(learning_rate, initial_accumulator_value=0.1, use_locking=False, name=’Adagrad’)
构建一个新的Adagrad优化器。

ARGS:
learning_rate:A Tensor或浮点值。学习率。
initial_accumulator_value:浮点值。累加器的起始值必须是正值。
use_locking:如果True使用锁定进行更新操作。
name:应用梯度时创建的操作的可选名称前缀。默认为“Adagrad”。
举:
ValueError:如果initial_accumulator_value无效。

-
class tf.train.MomentumOptimizer
实现Momentum算法的优化器。

tf.train.MomentumOptimizer.init(learning_rate, momentum, use_locking=False, name=’Momentum’)
构建一个新的Momentum优化器。

ARGS:
learning_rate:A Tensor或浮点值。学习率。
momentum:A Tensor或浮点值。势头。
use_locking:如果True使用锁定进行更新操作。
name:应用梯度时创建的操作的可选名称前缀。默认为“动量”。

-
class tf.train.AdamOptimizer
实现Adam算法的优化器。

tf.train.AdamOptimizer.init(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name=’Adam’)
构建一个新的Adam优化器。

实施依据:http : //arxiv.org/pdf/1412.6980v7.pdf

初始化:

m_0 <- 0 (Initialize initial 1st moment vector)
v_0 <- 0 (Initialize initial 2nd moment vector)
t <- 0 (Initialize timestep)
variable带梯度的更新规则g使用本文第2部分末尾描述的优化:

t <- t + 1
lr_t <- learning_rate * sqrt(1 - beta2^t) / (1 - beta1^t)

m_t <- beta1 * m_{t-1} + (1 - beta1) * g
v_t <- beta2 * v_{t-1} + (1 - beta2) * g * g
variable <- variable - lr_t * m_t / (sqrt(v_t) + epsilon)
一般来说,epsilon的默认值1e-8可能不是一个好的默认值。例如,当在ImageNet上训练一个Inception网络时,当前的好选择是1.0或0.1。

ARGS:
learning_rate:张量或浮点值。学习率。
beta1:浮点值或常量浮点张量。一阶矩估计的指数衰减率。
beta2:浮点值或常量浮点张量。第二时刻估计的指数衰减率。
epsilon:数值稳定性的一个小常量。
use_locking:如果True使用锁定进行更新操作
name:应用梯度时创建的操作的可选名称。默认为“Adam”。

-
class tf.train.FtrlOptimizer
实现FTRL算法的优化器。

tf.train.FtrlOptimizer.init(learning_rate, learning_rate_power=-0.5, initial_accumulator_value=0.1, l1_regularization_strength=0.0, l2_regularization_strength=0.0, use_locking=False, name=’Ftrl’)
构建一个新的FTRL优化器。

在“ Ad Click Prediction:a View from the Trenches”一文中描述了Ftrl-proximal算法,缩写为Follow-the-regularized-leader 。

它可以提供良好的性能与稀疏性权衡。

Ftrl近端使用其自己的全球基础学习率,可以表现得像Adagrad learning_rate_power=-0.5一样,或者像梯度下降一样 learning_rate_power=0.0。

有效学习率按照每个参数进行调整,相对于此基本学习率为:

effective_learning_rate_i = (learning_rate /
pow(k + summed_squared_gradients_for_i, learning_rate_power));
其中k是小常数initial_accumulator_value。

请注意,|w|^2目标函数的实际正则化系数是在使用此函数时1 / lambda_2指定l2 = lambda_2为参数。

ARGS:
learning_rate:浮点值或常量浮点数Tensor。
learning_rate_power:浮点值必须小于或等于零。
initial_accumulator_value:累加器的起始值。只允许正值。
l1_regularization_strength:浮点值,必须大于或等于零。
l2_regularization_strength:浮点值,必须大于或等于零。
use_locking:如果True使用锁定进行更新操作。
name:应用梯度时创建的操作的可选名称前缀。默认为“Ftrl”。
举:
ValueError:如果其中一个参数无效。

-
class tf.train.RMSPropOptimizer
实现RMSProp算法的优化器。

tf.train.RMSPropOptimizer.init(learning_rate, decay, momentum=0.0, epsilon=1e-10, use_locking=False, name=’RMSProp’)
构建一个新的RMSProp优化器。

ARGS:
learning_rate:张量或浮点值。学习率。
decay:历史/即将到来的折价的折扣因子
momentum:一个标量张量。
epsilon:小数值以避免零分母。
use_locking:如果True使用锁定进行更新操作。
name:应用梯度时创建的操作的可选名称prefic。默认为“RMSProp”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值