當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python tf.keras.optimizers.Adam用法及代碼示例

實現 Adam 算法的優化器。

繼承自:Optimizer

用法

tf.keras.optimizers.Adam(
    learning_rate=0.001, beta_1=0.9, beta_2=0.999, epsilon=1e-07, amsgrad=False,
    name='Adam', **kwargs
)

參數

  • learning_rate 一個 Tensor ,浮點值,或者是一個 tf.keras.optimizers.schedules.LearningRateSchedule 的計劃,或者一個不帶參數並返回要使用的實際值的可調用對象,即學習率。默認為 0.001。
  • beta_1 浮點值或常量浮點張量,或不帶參數並返回要使用的實際值的可調用對象。一階矩估計的 index 衰減率。默認為 0.9。
  • beta_2 浮點值或常量浮點張量,或不帶參數並返回要使用的實際值的可調用函數,二階矩估計的 index 衰減率。默認為 0.999。
  • epsilon 用於數值穩定性的小常數。這個 epsilon 是 Kingma 和 Ba 論文中的 "epsilon hat"(在 2.1 節之前的公式中),而不是論文算法 1 中的 epsilon。默認為 1e-7。
  • amsgrad 布爾值。是否應用來自論文“On the Convergence of Adam and beyond”的該算法的 AMSGrad 變體。默認為 False
  • name 應用漸變時創建的操作的可選名稱。默認為 "Adam"
  • **kwargs 關鍵字參數。允許是 "clipnorm""clipvalue" 之一。 "clipnorm" (float) 按標準裁剪漸變; "clipvalue" (float) 按值裁剪漸變。

拋出

  • ValueError 在任何無效論點的情況下。

Adam 優化是一種基於first-order 和second-order 矩的自適應估計的隨機梯度下降方法。

根據 Kingma 等人,2014 年的說法,該方法“計算效率高,內存需求少,對梯度的對角線重新縮放不變,並且非常適合數據/參數方麵的大問題”。

用法:

opt = tf.keras.optimizers.Adam(learning_rate=0.1)
var1 = tf.Variable(10.0)
loss = lambda:(var1 ** 2)/2.0       # d(loss)/d(var1) == var1
step_count = opt.minimize(loss, [var1]).numpy()
# The first step is `-learning_rate*sign(grad)`
var1.numpy()
9.9

參考:

注意:

epsilon 的默認值 1e-7 通常可能不是一個好的默認值。例如,在 ImageNet 上訓練 Inception 網絡時,當前較好的選擇是 1.0 或 0.1。請注意,由於 Adam 使用的是 Kingma 和 Ba 論文第 2.1 節之前的公式,而不是算法 1 中的公式,因此這裏提到的"epsilon" 在論文中是"epsilon hat"。

該算法的稀疏實現(當梯度是 IndexedSlices 對象時使用,通常是因為tf.gather 或前向傳遞中的嵌入查找)確實將動量應用於可變切片,即使它們未在前向傳遞中使用(意味著它們梯度為零)。動量衰減 (beta1) 也適用於整個動量累加器。這意味著稀疏行為等同於密集行為(與某些動量實現相反,除非實際使用變量切片,否則它們會忽略動量)。

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.keras.optimizers.Adam。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。