当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。