基礎最佳化器類

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,會對更新作業使用鎖定。
  • learning_rate_decayfloat。應用學習率衰減。
  • decay_stepint。在提供的步驟中應用衰減。
  • staircasebool。如果它為 True,則以離散的間隔衰減學習率。
  • use_locking: bool。如果為 True,會對更新作業使用鎖定。
  • namestr。應用梯度時,建立作業的選用名稱字首。預設為「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。學習率。
  • decayfloat。歷史/即將到來梯度的折扣因子。
  • momentumfloat。動態
  • epsilonfloat。避免分母為 0 的小值。
  • use_locking: bool。如果為 True,會對更新作業使用鎖定。
  • namestr。應用梯度時,建立作業的選用名稱字首。預設為「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。學習率。
  • beta1float。第一個矩估計值的指數衰減率。
  • beta2float。第二個矩估計值的指數衰減率。
  • epsilonfloat。用於數值穩定的常數。
  • use_locking: bool。如果為 True,會對更新作業使用鎖定。
  • namestr。應用梯度時,建立作業的選用名稱字首。預設為「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')

Momentum Optimizer 接受學習率衰減。在訓練模型時,通常建議在訓練進行時降低學習率。函式回傳已衰減的學習率。計算方式如下

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。學習率。
  • momentumfloat。動態
  • learning_rate_decayfloat。應用學習率衰減。
  • decay_stepint。在提供的步驟中應用衰減。
  • staircasebool。如果它為 True,則以離散的間隔衰減學習率。
  • use_locking: bool。如果為 True,會對更新作業使用鎖定。
  • namestr。應用梯度時,建立作業的選用名稱字首。預設為「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_valuefloat。累加器的起始值,必須為正數。
  • use_locking: bool。如果為 True,會對更新作業使用鎖定。
  • namestr。應用梯度時,建立作業的選用名稱字首。預設為「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 使用其自己的全局基礎學習率,並可以像具有 learning_rate_power=-0.5 的 Adagrad 或具有 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_powerfloat。必須小於或等於 0。
  • initial_accumulator_valuefloat。累加器的起始值。僅允許正值。
  • l1_regularization_strengthfloat。必須小於或等於 0。
  • l2_regularization_strengthfloat。必須小於或等於 0。
  • use_locking:bool。如果為 True,則鎖定更新操作。
  • namestr。應用梯度時建立操作的選用名稱字首。預設為「Ftrl」。

連結

廣告點擊預測:深入探討


AdaDelta

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

建構新的 Adadelta 最佳化器。

參數

  • learning_rateTensor 或浮點數值。學習率。
  • rhoTensor 或浮點數值。衰減率。
  • epsilonTensor 或浮點數值。用於改善梯度更新調整的常數 epsilon。
  • use_locking:如果為 True,則鎖定更新操作。
  • name:應用梯度時建立操作的選用名稱字首。預設為「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_valuefloat。累加器的起始值,必須為正數。
  • use_locking: bool。如果為 True,會對更新作業使用鎖定。
  • namestr。應用梯度時,建立作業的選用名稱字首。預設為「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。學習率。
  • momentumfloat。動態
  • learning_rate_decayfloat。應用學習率衰減。
  • decay_stepint。在提供的步驟中應用衰減。
  • staircasebool。如果它為 True,則以離散的間隔衰減學習率。
  • use_locking: bool。如果為 True,會對更新作業使用鎖定。
  • namestr。應用梯度時,建立作業的選用名稱字首。預設為「Momentum」。