tf.keras.optimizers.legacy.SGD
Оптимизатор градиентного спуска (с моментом).
Наследуется от: SGD, Optimizer
tf.keras.optimizers.legacy.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 | Дополнительные ключевые аргументы. Разрешенные аргументы: clipvalue, clipnorm, global_clipnorm. Если clipvalue (вещественное число) задано, градиент каждого веса ограничивается значением, не превышающим это значение. Если clipnorm (вещественное число) задано, градиент каждого веса отдельно ограничивается так, чтобы его норма не превышала это значение. Если global_clipnorm (вещественное число) задано, градиент всех весов ограничивается так, чтобы их глобальная норма не превышала это значение. |
Использование:
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.
| Возбуждает | |
|---|---|
ValueError | В случае некорректного аргумента. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/keras/optimizers/legacy/SGD