PolynomialDecay

[原始碼]

PolynomialDecay 類別

keras.optimizers.schedules.PolynomialDecay(
    initial_learning_rate,
    decay_steps,
    end_learning_rate=0.0001,
    power=1.0,
    cycle=False,
    name="PolynomialDecay",
)

一個 LearningRateSchedule 類別,使用多項式衰減排程。

通常觀察到,單調遞減的學習率,其變化程度經過仔細選擇,會產生效能更佳的模型。此排程將多項式衰減函數應用於最佳化器步驟,給定提供的 initial_learning_rate,以在給定的 decay_steps 內達到 end_learning_rate

它需要一個 step 值來計算衰減的學習率。您只需傳遞一個後端變數,在每個訓練步驟中遞增它即可。

此排程是一個單參數可呼叫物件,當傳遞目前最佳化器步驟時,會產生衰減的學習率。這對於在不同最佳化器函數調用之間更改學習率值非常有用。其計算方式為

def decayed_learning_rate(step):
    step = min(step, decay_steps)
    return ((initial_learning_rate - end_learning_rate) *
            (1 - step / decay_steps) ^ (power)
           ) + end_learning_rate

如果 cycle 為 True,則會使用 decay_steps 的倍數,第一個大於 step 的倍數。

def decayed_learning_rate(step):
    decay_steps = decay_steps * ceil(step / decay_steps)
    return ((initial_learning_rate - end_learning_rate) *
            (1 - step / decay_steps) ^ (power)
           ) + end_learning_rate

您可以將此排程直接傳遞到 keras.optimizers.Optimizer 作為學習率。範例

在 10000 個步驟中使用從 0.1 衰減到 0.01 的方式擬合模型

sqrt(即 power=0.5)

...
starter_learning_rate = 0.1
end_learning_rate = 0.01
decay_steps = 10000
learning_rate_fn = keras.optimizers.schedules.PolynomialDecay(
    starter_learning_rate,
    decay_steps,
    end_learning_rate,
    power=0.5)

model.compile(optimizer=keras.optimizers.SGD(
                  learning_rate=learning_rate_fn),
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(data, labels, epochs=5)

學習率排程也可以使用 keras.optimizers.schedules.serializekeras.optimizers.schedules.deserialize 進行序列化和反序列化。

引數

  • initial_learning_rate:Python 浮點數。初始學習率。
  • decay_steps:Python 整數。必須為正數。請參閱上面的衰減計算。
  • end_learning_rate:Python 浮點數。最小終止學習率。
  • power:Python 浮點數。多項式的次方。預設為 1.0
  • cycle:布林值,是否應在 decay_steps 之外循環。
  • name:字串。操作的選用名稱。預設為 "PolynomialDecay"

返回

一個單參數可呼叫的學習率排程,它接受目前最佳化器步驟並輸出衰減的學習率,一個與 initial_learning_rate 相同類型的純量張量。