前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tf.train.MomentumOptimizer

tf.train.MomentumOptimizer

作者头像
狼啸风云
修改2022-09-04 21:00:57
2.8K0
修改2022-09-04 21:00:57
举报
文章被收录于专栏:计算机视觉理论及其实现

实现momentum算法的优化器。计算表达式如下(如果use_nesterov = False):

代码语言:javascript
复制
accumulation = momentum * accumulation + gradient
variable -= learning_rate * accumulation

注意,在这个算法的密集版本中,不管梯度值是多少,都会更新和应用累加,而在稀疏版本中(当梯度是索引切片时,通常是因为tf)。只有在前向传递中使用变量的部分时,才更新变量片和相应的累积项。

__init__

代码语言:javascript
复制
__init__(
    learning_rate,
    momentum,
    use_locking=False,
    name='Momentum',
    use_nesterov=False
)

构造一个新的momentum optimizer。

参数:

learning_rate: 张量或浮点值。学习速率。

momentum: 张量或浮点值。

use_lock:如果真要使用锁进行更新操作。

name:可选的名称前缀,用于应用渐变时创建的操作。默认为“动力”。

如果是真的,使用Nesterov动量。参见Sutskever et al., 2013。这个实现总是根据传递给优化器的变量的值计算梯度。使用Nesterov动量使变量跟踪本文中称为theta_t + *v_t的值。这个实现是对原公式的近似,适用于高动量值。它将计算NAG中的“调整梯度”,假设新的梯度将由当前的平均梯度加上动量和平均梯度变化的乘积来估计。

Eager Compatibility:

当启用了紧急执行时,learning_rate和momentum都可以是一个可调用的函数,不接受任何参数,并返回要使用的实际值。这对于跨不同的优化器函数调用更改这些值非常有用。

方法:

apply_gradients

代码语言:javascript
复制
apply_gradients(
    grads_and_vars,
    global_step=None,
    name=None
)

对变量应用梯度,这是minimize()的第二部分,它返回一个应用渐变的操作。

参数:

  • grads_and_vars: compute_gradients()返回的(渐变、变量)对列表。
  • global_step: 可选变量,在变量更新后递增1。
  • name: 返回操作的可选名称。默认为传递给优化器构造函数的名称。

返回:

  • 应用指定梯度的操作。如果global_step不是None,该操作也会递增global_step。

异常:

  • TypeError: If grads_and_vars is malformed.
  • ValueError: If none of the variables have gradients.
  • RuntimeError: If you should use _distributed_apply() instead.

compute_gradients

代码语言:javascript
复制
apply_gradients(
    grads_and_vars,
    global_step=None,
    name=None
)

对变量应用梯度,这是最小化()的第二部分,它返回一个应用渐变的操作。

参数:

  • grads_and_vars: compute_gradients()返回的(渐变、变量)对列表。
  • global_step:可选变量,在变量更新后递增1。
  • name:返回操作的可选名称。默认为传递给优化器构造函数的名称。

返回值:

  • 应用指定梯度的操作,如果global_step不是None,该操作也会递增global_step。

异常:

  • TypeError: If grads_and_vars is malformed.
  • ValueError: If none of the variables have gradients.
  • RuntimeError: If you should use _distributed_apply() instead.

compute_gradients

代码语言:javascript
复制
compute_gradients(
    loss,
    var_list=None,
    gate_gradients=GATE_OP,
    aggregation_method=None,
    colocate_gradients_with_ops=False,
    grad_loss=None
)

为var_list中的变量计算损失梯度。这是最小化()的第一部分。它返回一个(梯度,变量)对列表,其中“梯度”是“变量”的梯度。注意,“梯度”可以是一个张量,一个索引切片,或者没有,如果给定变量没有梯度。

参数:

  • loss: 一个包含要最小化的值的张量,或者一个不带参数的可调用张量,返回要最小化的值。当启用紧急执行时,它必须是可调用的。
  • var_list: tf的可选列表或元组。要更新的变量,以最小化损失。默认值为key GraphKeys.TRAINABLE_VARIABLES下的图表中收集的变量列表。
  • gate_gradients: 如何对梯度计算进行gate。可以是GATE_NONE、GATE_OP或GATE_GRAPH。
  • aggregation_method: 指定用于合并渐变项的方法。有效值在类AggregationMethod中定义。

返回:

  • (梯度,变量)对的列表。变量总是存在的,但梯度可以是零。

异常:

  • TypeError: If var_list contains anything else than Variable objects.
  • ValueError: If some arguments are invalid.
  • RuntimeError: If called with eager execution enabled and loss is not callable.

Eager Compatibility:

当启用了即时执行时,会忽略gate_gradients、aggregation_method和colocate_gradients_with_ops。

get_name

代码语言:javascript
复制
get_name()

get_slot

代码语言:javascript
复制
get_slot(
    var,
    name
)

一些优化器子类使用额外的变量。例如动量和Adagrad使用变量来累积更新。例如动量和Adagrad使用变量来累积更新。如果出于某种原因需要这些变量对象,这个方法提供了对它们的访问。使用get_slot_names()获取优化器创建的slot列表。

参数:

  • var: 传递给minimum()或apply_gradients()的变量。
  • name: 一个字符串。

返回值:

  • 如果创建了slot的变量,则没有其他变量。

get_slot_names

代码语言:javascript
复制
get_slot_names()

返回优化器创建的槽的名称列表。

返回值:

  • 字符串列表。

minimize

代码语言:javascript
复制
minimize(
    loss,
    global_step=None,
    var_list=None,
    gate_gradients=GATE_OP,
    aggregation_method=None,
    colocate_gradients_with_ops=False,
    name=None,
    grad_loss=None
)

通过更新var_list,添加操作以最小化损失。此方法简单地组合调用compute_gradients()和apply_gradients()。如果想在应用渐变之前处理渐变,可以显式地调用compute_gradients()和apply_gradients(),而不是使用这个函数。

参数:

  • loss: 包含要最小化的值的张量。
  • global_step: 可选变量,在变量更新后递增1。
  • var_list: 可选的变量对象列表或元组,用于更新以最小化损失。默认值为key GraphKeys.TRAINABLE_VARIABLES下的图表中收集的变量列表。
  • gate_gradients: 如何对梯度计算进行gate。可以是GATE_NONE、GATE_OP或GATE_GRAPH。
  • aggregation_method: 指定用于合并渐变项的方法。有效值在类AggregationMethod中定义。
  • colocate_gradients_with_ops: 如果为真,请尝试使用相应的op来合并渐变。
  • name: 返回操作的可选名称。
  • grad_loss: 可选的。一个包含梯度的张量,用来计算损耗。

返回值:

  • 更新var_list中的变量的操作。如果global_step不是None,该操作也会递增global_step。

异常:

  • ValueError: If some of the variables are not Variable objects.

Eager Compatibility

当启用紧急执行时,loss应该是一个Python函数,它不接受任何参数,并计算要最小化的值。最小化(和梯度计算)是针对var_list的元素完成的,如果不是没有,则针对在执行loss函数期间创建的任何可训练变量。启用紧急执行时,gate_gradients、aggregation_method、colocate_gradients_with_ops和grad_loss将被忽略。

variables

代码语言:javascript
复制
variables()

编码优化器当前状态的变量列表。包括由优化器在当前默认图中创建的插槽变量和其他全局变量。

返回值:

  • 变量列表。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年06月12日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档