实现momentum算法的优化器。计算表达式如下(如果use_nesterov = False):
accumulation = momentum * accumulation + gradient variable -= learning_rate * accumulation
__init__
__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
apply_gradients( grads_and_vars, global_step=None, name=None )
对变量应用梯度,这是minimize
()的第二部分,它返回一个应用渐变的操作。
参数:
返回:
- 应用指定梯度的操作。如果global_step不是None,该操作也会递增global_step。
异常:
TypeError
: Ifgrads_and_vars
is malformed.ValueError
: If none of the variables have gradients.RuntimeError
: If you should use_distributed_apply()
instead.
compute_gradients
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
: Ifgrads_and_vars
is malformed.ValueError
: If none of the variables have gradients.RuntimeError
: If you should use_distributed_apply()
instead.
compute_gradients
compute_gradients( loss, var_list=None, gate_gradients=GATE_OP, aggregation_method=None, colocate_gradients_with_ops=False, grad_loss=None )
为var_list中的变量计算损失梯度。这是最小化()的第一部分。它返回一个(梯度,变量)对列表,其中“梯度”是“变量”的梯度。注意,“梯度”可以是一个张量,一个索引切片,或者没有,如果给定变量没有梯度。
参数:
loss
返回:
- (梯度,变量)对的列表。变量总是存在的,但梯度可以是零。
异常:
TypeError
: Ifvar_list
contains anything else thanVariable
objects.ValueError
: If some arguments are invalid.RuntimeError
: If called with eager execution enabled andloss
is not callable.
Eager Compatibility:
当启用了即时执行时,会忽略gate_gradients、aggregation_method和colocate_gradients_with_ops。
get_name
get_name()
get_slot
get_slot( var, name )
一些优化器子类使用额外的变量。例如动量和Adagrad使用变量来累积更新。例如动量和Adagrad使用变量来累积更新。如果出于某种原因需要这些变量对象,这个方法提供了对它们的访问。使用get_slot_names()获取优化器创建的slot列表。
参数:
name
返回值:
- 如果创建了slot的变量,则没有其他变量。
get_slot_names
get_slot_names()
返回优化器创建的槽的名称列表。
返回值:
- 字符串列表。
minimize
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(),而不是使用这个函数。
参数:
返回值:
- 更新var_list中的变量的操作。如果global_step不是None,该操作也会递增global_step。
异常:
ValueError
: If some of the variables are notVariable
objects.
variables
variables()
编码优化器当前状态的变量列表。包括由优化器在当前默认图中创建的插槽变量和其他全局变量。
返回值:
- 变量列表。
原链接:https://tensorflow.google.cn/versions/r1.14/api_docs/python/tf/train/MomentumOptimizer