基础优化器类

tflearn.optimizers.Optimizer (learning_rate, use_locking, name)

用于创建与 TFLearn 估计器一起使用的优化器的基本类。首先,使用给定的参数初始化 Optimizer 类,但不创建张量。在第二步中,调用 get_tensor 方法将实际构建 TensorFlow Optimizer 张量并返回它。

这样,用户可以轻松地使用非默认参数和学习率衰减来指定优化器,而 TFLearn 估计器将自行构建优化器和步长张量。

参数

  • learning_rate: float。学习率。
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。优化器名称。

属性

  • tensor: Optimizer。优化器张量。
  • has_decay: bool。如果优化器具有学习率衰减,则为 True。

方法

build (step_tensor=None)

此方法使用指定的参数创建优化器。它必须为每个 Optimizer 实现。

参数
  • step_tensor: tf.Tensor。保存训练步长的变量。仅当优化器具有学习率衰减时才需要。

get_tensor (self)

检索优化器张量的方法。

返回

Optimizer


随机梯度下降

tflearn.optimizers.SGD (learning_rate=0.001, lr_decay=0.0, decay_step=100, staircase=False, use_locking=False, name='SGD')

SGD 优化器接受学习率衰减。在训练模型时,通常建议随着训练的进行降低学习率。该函数返回衰减后的学习率。它的计算方式为

decayed_learning_rate = learning_rate *  decay_rate ^ (global_step / decay_steps)

示例

# With TFLearn estimators.
sgd = SGD(learning_rate=0.01, lr_decay=0.96, decay_step=100)
regression = regression(net, optimizer=sgd)

# Without TFLearn estimators (returns tf.Optimizer).
sgd = SGD(learning_rate=0.01).get_tensor()

参数

  • learning_rate: float。学习率。
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • lr_decay: float。要应用的学习率衰减。
  • decay_step: int。每隔提供的步数应用一次衰减。
  • staircase: bool。如果为 True,则以离散间隔衰减学习率。
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“GradientDescent”。

RMSprop

tflearn.optimizers.RMSProp (learning_rate=0.001, decay=0.9, momentum=0.0, epsilon=1e-10, use_locking=False, name='RMSProp')

维护梯度平方的移动(折扣)平均值。将梯度除以该平均值的平方根。

示例

# With TFLearn estimators.
rmsprop = RMSProp(learning_rate=0.1, decay=0.999)
regression = regression(net, optimizer=rmsprop)

# Without TFLearn estimators (returns tf.Optimizer).
rmsprop = RMSProp(learning_rate=0.01, decay=0.999).get_tensor()
# or
rmsprop = RMSProp(learning_rate=0.01, decay=0.999)()

参数

  • learning_rate: float。学习率。
  • decay: float。历史/即将到来的梯度的折扣因子。
  • momentum: float。动量。
  • epsilon: float。避免零分母的小值。
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“RMSProp”。

Adam

tflearn.optimizers.Adam (learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')

epsilon 的默认值 1e-8 通常可能不是一个好的默认值。例如,在 ImageNet 上训练 Inception 网络时,当前的良好选择是 1.0 或 0.1。

示例

# With TFLearn estimators
adam = Adam(learning_rate=0.001, beta1=0.99)
regression = regression(net, optimizer=adam)

# Without TFLearn estimators (returns tf.Optimizer)
adam = Adam(learning_rate=0.01).get_tensor()

参数

  • learning_rate: float。学习率。
  • beta1: float。一阶矩估计的指数衰减率。
  • beta2: float。二阶矩估计的指数衰减率。
  • epsilon: float。用于数值稳定性的较小常数。
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“Adam”。

参考文献

Adam:一种随机优化方法。Diederik Kingma,Jimmy Ba。ICLR 2015。

链接

论文


动量

tflearn.optimizers.Momentum (learning_rate=0.001, momentum=0.9, lr_decay=0.0, decay_step=100, staircase=False, use_locking=False, name='Momentum')

动量优化器接受学习率衰减。在训练模型时,通常建议随着训练的进行降低学习率。该函数返回衰减后的学习率。它的计算方式为

decayed_learning_rate = learning_rate *  decay_rate ^ (global_step / decay_steps)

示例

# With TFLearn estimators
momentum = Momentum(learning_rate=0.01, lr_decay=0.96, decay_step=100)
regression = regression(net, optimizer=momentum)

# Without TFLearn estimators (returns tf.Optimizer)
mm = Momentum(learning_rate=0.01, lr_decay=0.96).get_tensor()

参数

  • learning_rate: float。学习率。
  • momentum: float。动量。
  • lr_decay: float。要应用的学习率衰减。
  • decay_step: int。每隔提供的步数应用一次衰减。
  • staircase: bool。如果为 True,则以离散间隔衰减学习率。
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“Momentum”。

AdaGrad

tflearn.optimizers.AdaGrad (learning_rate=0.001, initial_accumulator_value=0.1, use_locking=False, name='AdaGrad')

示例

# With TFLearn estimators
adagrad = AdaGrad(learning_rate=0.01, initial_accumulator_value=0.01)
regression = regression(net, optimizer=adagrad)

# Without TFLearn estimators (returns tf.Optimizer)
adagrad = AdaGrad(learning_rate=0.01).get_tensor()

参数

  • learning_rate: float。学习率。
  • initial_accumulator_value: float。累加器的起始值,必须为正数
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“AdaGrad”。

参考文献

在线学习和随机优化的自适应次梯度方法。J. Duchi、E. Hazan 和 Y. Singer。机器学习研究期刊 12 (2011) 2121-2159。

链接

论文


Ftrl Proximal

tflearn.optimizers.Ftrl (learning_rate=3.0, 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-proximal 算法,缩写为 Follow-the-regularized-leader,在下面的论文中进行了描述。

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

Ftrl-proximal 使用其自身的全局基础学习率,并且可以像 Adagrad 一样使用 learning_rate_power=-0.5,或者像梯度下降一样使用 learning_rate_power=0.0

示例

# With TFLearn estimators.
ftrl = Ftrl(learning_rate=0.01, learning_rate_power=-0.1)
regression = regression(net, optimizer=ftrl)

# Without TFLearn estimators (returns tf.Optimizer).
ftrl = Ftrl(learning_rate=0.01).get_tensor()

参数

  • learning_rate: float。学习率。
  • learning_rate_power: float。必须小于或等于零。
  • initial_accumulator_value: float。累加器的起始值。只允许正值。
  • l1_regularization_strength: float。必须小于或等于零。
  • l2_regularization_strength: float。必须小于或等于零。
  • use_locking: bool`. 如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“Ftrl”。

链接

广告点击预测:来自战壕的视角


AdaDelta

tflearn.optimizers.AdaDelta (learning_rate=0.001, rho=0.1, epsilon=1e-08, use_locking=False, name='AdaDelta')

构造一个新的 Adadelta 优化器。

参数

  • learning_rate: Tensor 或浮点值。学习率。
  • rho: Tensor 或浮点值。衰减率。
  • epsilon: Tensor 或浮点值。用于更好地调节梯度更新的常数 epsilon。
  • use_locking: 如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“Adadelta”。

参考文献

ADADELTA:一种自适应学习率方法,Matthew D. Zeiler,2012。

链接

http://arxiv.org/abs/1212.5701


ProximalAdaGrad

tflearn.optimizers.ProximalAdaGrad (learning_rate=0.001, initial_accumulator_value=0.1, use_locking=False, name='AdaGrad')

示例

# With TFLearn estimators
proxi_adagrad = ProximalAdaGrad(learning_rate=0.01,l2_regularization_strength=0.01,initial_accumulator_value=0.01)
regression = regression(net, optimizer=proxi_adagrad)

# Without TFLearn estimators (returns tf.Optimizer)
adagrad = ProximalAdaGrad(learning_rate=0.01).get_tensor()

参数

  • learning_rate: float。学习率。
  • initial_accumulator_value: float。累加器的起始值,必须为正数
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“AdaGrad”。

参考文献

使用前向-后向分裂进行高效学习。J. Duchi、Yoram Singer,2009。

链接

论文


Nesterov

tflearn.optimizers.Nesterov (learning_rate=0.001, momentum=0.9, lr_decay=0.0, decay_step=100, staircase=False, use_locking=False, name='Nesterov')

经典动量和 Nesterov 之间的主要区别在于:在经典动量中,首先校正速度,然后根据该速度迈出一大步(然后重复),但在 Nesterov 动量中,首先朝速度方向迈出一步,然后根据新位置对速度向量进行校正(然后重复)。参见 Sutskever 等人,2013

示例

# With TFLearn estimators
nesterov = Nesterov(learning_rate=0.01, lr_decay=0.96, decay_step=100)
regression = regression(net, optimizer=nesterov)

# Without TFLearn estimators (returns tf.Optimizer)
mm = Neserov(learning_rate=0.01, lr_decay=0.96).get_tensor()

参数

  • learning_rate: float。学习率。
  • momentum: float。动量。
  • lr_decay: float。要应用的学习率衰减。
  • decay_step: int。每隔提供的步数应用一次衰减。
  • staircase: bool。如果为 True,则以离散间隔衰减学习率。
  • use_locking: bool。如果为 True,则对更新操作使用锁。
  • name: str。应用梯度时创建的操作的可选名称前缀。默认为“Momentum”。