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


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


梯度下降(帶動量)優化器。

繼承自:Optimizer

用法

tf.keras.optimizers.SGD(
    learning_rate=0.01, momentum=0.0, nesterov=False, name='SGD', **kwargs
)

參數

  • learning_rate Tensor ,浮點值,或作為 tf.keras.optimizers.schedules.LearningRateSchedule 的計劃,或不帶參數並返回要使用的實際值的可調用對象。學習率。默認為 0.01。
  • momentum float 超參數 >= 0,加速相關方向的梯度下降並抑製振蕩。默認為 0,即普通梯度下降。
  • nesterov 布爾值。是否應用 Nesterov 動量。默認為 False
  • name 應用漸變時創建的操作的可選名稱前綴。默認為 "SGD"
  • **kwargs 關鍵字參數。允許是 "clipnorm""clipvalue" 之一。 "clipnorm" (float) 按標準裁剪漸變; "clipvalue" (float) 按值裁剪漸變。

拋出

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

momentum 為 0 時,使用梯度 g 更新參數 w 的規則:

w = w - learning_rate * g

momentum 大於 0 時更新規則:

velocity = momentum * velocity - learning_rate * g
w = w + velocity

nesterov=True 時,此規則變為:

velocity = momentum * velocity - learning_rate * g
w = w + momentum * velocity - learning_rate * g

用法:

opt = tf.keras.optimizers.SGD(learning_rate=0.1)
var = tf.Variable(1.0)
loss = lambda:(var ** 2)/2.0         # d(loss)/d(var1) = var1
step_count = opt.minimize(loss, [var]).numpy()
# Step is `- learning_rate * grad`
var.numpy()
0.9
opt = tf.keras.optimizers.SGD(learning_rate=0.1, momentum=0.9)
var = tf.Variable(1.0)
val0 = var.value()
loss = lambda:(var ** 2)/2.0         # d(loss)/d(var1) = var1
# First step is `- learning_rate * grad`
step_count = opt.minimize(loss, [var]).numpy()
val1 = var.value()
(val0 - val1).numpy()
0.1
# On later steps, step-size increases because of momentum
step_count = opt.minimize(loss, [var]).numpy()
val2 = var.value()
(val1 - val2).numpy()
0.18

參考:

  • 對於nesterov=True,請參見 Sutskever 等人,2013 年。

相關用法


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