tf.keras.optimizers.SGD
| View source on 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
| Args | |
|---|---|
learning_rate | Значение с плавающей точкой, число или расписание, являющееся tf.keras.optimizers.schedules.LearningRateSchedule, или вызываемый объект, который не принимает аргументы и возвращает фактическое значение для использования. Скорость обучения. По умолчанию 0,01. |
momentum | Гиперпараметр типа float >= 0, который ускоряет градиентный спуск в соответствующем направлении и гасит колебания. По умолчанию 0, т. е. обычный градиентный спуск. |
nesterov | Логическое значение. Применять ли импульс Нестерова. По умолчанию False. |
name | Необязательный префикс имени для операций, созданных при применении градиентов. По умолчанию "SGD". |
**kwargs | Именованные аргументы. Допустимые аргументы: clipvalue, clipnorm, global_clipnorm. Если clipvalue (float) задано, градиент каждого веса ограничивается этим значением. Если clipnorm (float) задано, градиент каждого веса индивидуально ограничивается так, чтобы его норма не превышала это значение. Если global_clipnorm (float) задано, градиент всех весов ограничивается так, чтобы их глобальная норма не превышала это значение. |
Использование:
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.
| Raises | |
|---|---|
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/SGD