基础优化器类
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”。