tf.keras.optimizers.SGD
| Просмотреть исходный код на GitHub |
Оптимизатор градиентного спуска (с моментом).
Наследуется от: Optimizer
tf.keras.optimizers.SGD(
learning_rate=0.01, momentum=0.0, nesterov=False, name='SGD', **kwargs
)
Правило обновления параметра w с градиентом g при momentum равно 0:
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
| Аргументы | |
|---|---|
learning_rate | Значение с плавающей точкой, или расписание, которое является tf.keras.optimizers.schedules.LearningRateSchedule, или вызываемая функция без аргументов, возвращающая фактическое значение для использования. Скорость обучения. По умолчанию 0.01. |
momentum | Вещественный гиперпараметр >= 0, ускоряющий градиентный спуск в соответствующем направлении и гасящий колебания. По умолчанию 0, т.е. обычный градиентный спуск. |
nesterov | Булево значение. Применять ли импульс Нестерова. По умолчанию False. |
name | Необязательное префиксное имя для операций, созданных при применении градиентов. По умолчанию "SGD". |
**kwargs | Дополнительные ключевые параметры. Разрешено быть одним из "clipnorm" или "clipvalue". "clipnorm" (число с плавающей точкой) ограничивает градиенты по норме; "clipvalue" (число с плавающей точкой) ограничивает градиенты по значению. |
Использование:
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 et al., 2013.
| Возбуждения | |
|---|---|
ValueError | в случае любого некорректного аргумента. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/keras/optimizers/SGD