Spec-Zone.ru › TensorFlow 2.9

tf.keras.optimizers.experimental.SGD

Оптимизатор градиентного спуска (с моментом).

Наследуется от: Optimizer, Module

tf.keras.optimizers.experimental.SGD(
    learning_rate=0.01,
    momentum=0.0,
    nesterov=False,
    amsgrad=False,
    clipnorm=None,
    clipvalue=None,
    global_clipnorm=None,
    use_ema=False,
    ema_momentum=0.99,
    ema_overwrite_frequency=None,
    jit_compile=True,
    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.001.
momentum Числовой гиперпараметр >= 0, ускоряющий градиентный спуск в нужном направлении и гасящий колебания. По умолчанию 0, т.е. обычный градиентный спуск.
nesterov Булево значение. Применять ли импульс Нестерова. По умолчанию False.
name Строка. Имя для использования для весов аккумулятора импульса, созданных оптимизатором.
clipnorm Число с плавающей точкой. Если задано, градиент каждого веса индивидуально ограничивается таким образом, чтобы его норма не превышала это значение.
clipvalue Число с плавающей точкой. Если задано, градиент каждого веса ограничивается значением не большим, чем это значение.
global_clipnorm Число с плавающей точкой. Если задано, градиент всех весов ограничивается таким образом, чтобы их глобальная норма не превышала это значение.
use_ema Булево, по умолчанию False. Если True, применяется экспоненциальное скользящее среднее (EMA). EMA состоит из вычисления экспоненциального скользящего среднего весов модели (по мере изменения значений весов после каждой обучающей партии) и периодической перезаписи весов их скользящим средним.
ema_momentum Число с плавающей точкой, по умолчанию 0.99. Используется только если use_ema=True. Это импульс, используемый при вычислении EMA весов модели: new_average = ema_momentum * old_average + (1 - ema_momentum) * current_variable_value.
ema_overwrite_frequency Целое число или None, по умолчанию None. Используется только если use_ema=True. Каждые ema_overwrite_frequency шаги итераций мы перезаписываем переменную модели ее скользящим средним. Если None, оптимизатор не перезаписывает переменные модели в середине обучения, и вам нужно явно перезаписать переменные в конце обучения, вызвав optimizer.finalize_variable_values() (что обновляет переменные модели на месте). При использовании встроенного цикла обучения fit(), это происходит автоматически после последней эпохи, и вам ничего не нужно делать.
jit_compile Булево, по умолчанию True. Если True, оптимизатор будет использовать компиляцию XLA. jit_compile не может быть True при обучении с tf.distribute.experimental.ParameterServerStrategy. Кроме того, если графический процессор не найден, этот флаг будет проигнорирован.
**kwargs Ключевые аргументы, используемые только для обратной совместимости.

Использование:

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.
Атрибуты
iterations Количество шагов обучения, которые выполнил этот optimizer.

По умолчанию итерации будут увеличиваться на единицу каждый раз, когда вызывается apply_gradients().

learning_rate

Методы

add_variable

Смотреть исходный код

add_variable(
    shape, dtype=None, initializer='zeros', name=None
)

Создать переменную оптимизатора.

Аргументы
shape Список целых чисел, кортеж целых чисел или одномерный тензор типа int32. По умолчанию скаляр, если не указано.
dtype Тип данных переменной оптимизатора, которая будет создана. По умолчанию tf.keras.backend.floatx, если не указано.
initializer Строка или вызываемая функция. Экземпляр инициализатора.
name Имя переменной оптимизатора, которая будет создана.
Возвращаемое значение
Переменная оптимизатора в формате tf.Variable.

add_variable_from_reference

Смотреть исходный код

add_variable_from_reference(
    model_variable, variable_name, shape=None, initial_value=None
)

Создать переменную оптимизатора из переменной модели.

Создать переменную оптимизатора на основе информации о переменной модели. Например, в оптимизаторе SGD с моментом для каждой переменной модели создается соответствующая переменная момента той же формы и типа данных.

Аргументы
model_variable tf.Variable. Соответствующая переменная модели переменной оптимизатора, которая будет создана.
variable_name Строка. Префикс имени переменной оптимизатора, который будет создан. Имя создаваемой переменной будет следовать шаблону {variable_name}/{model_variable.name}, например, momemtum/dense_1.
shape Список или кортеж, по умолчанию None. Форма переменной оптимизатора, которая будет создана. Если None, созданная переменная будет иметь такую же форму, как у model_variable.
initial_value Тензор или Python-объект, преобразуемый в тензор, по умолчанию None. Начальное значение переменной оптимизатора, если None, начальное значение будет по умолчанию 0.
Возвращаемое значение
Переменная оптимизатора.

aggregate_gradients

Смотреть исходный код

aggregate_gradients(
    grads_and_vars
)

Агрегировать градиенты на всех устройствах.

По умолчанию мы будем выполнять reduce_sum градиентов по всем устройствам. Пользователи могут реализовать свою логику агрегации, переопределяя этот метод.

Аргументы
grads_and_vars Список пар (градиент, переменная).
Возвращаемое значение
Список пар (градиент, переменная).

apply_gradients

Смотреть исходный код

apply_gradients(
    grads_and_vars, skip_gradients_aggregation=False
)

Применить градиенты к переменным.

Аргументы
grads_and_vars Список пар (градиент, переменная).
skip_gradients_aggregation Если True, агрегация градиентов не будет выполняться внутри оптимизатора. Обычно этот аргумент устанавливается в True, когда вы пишете пользовательский код, агрегирующий градиенты вне оптимизатора.
Возвращаемое значение
None
Исключения
TypeError Если grads_and_vars имеет неправильный формат.
RuntimeError Если вызвана в контексте кросс-реплики.

build

Смотреть исходный код

build(
    var_list
)

Инициализировать переменные оптимизатора.

Оптимизатор SGD имеет одну переменную momentums, только если self.momentum не равно 0.

Аргументы
var_list список переменных модели, на которых будут построены переменные SGD.

compute_gradients

Смотреть исходный код

compute_gradients(
    loss, var_list, tape=None
)

Вычислить градиенты функции потерь по обучаемым переменным.

Аргументы
loss Функция потерь или вызываемая функция. Если вызываемая функция, loss не должна принимать аргументов и возвращать значение, которое нужно минимизировать.
var_list список или кортеж объектов Variable для обновления, чтобы минимизировать loss.
tape (Необязательно) tf.GradientTape. Если loss предоставлен как Tensor, лента, вычислившая loss, должна быть предоставлена.
Возвращаемое значение
Список пар (градиент, переменная). Переменная всегда присутствует, но градиент может быть None.

finalize_variable_values

Смотреть исходный код

finalize_variable_values(
    var_list
)

Установить конечное значение обучаемых переменных модели.

Иногда перед окончанием обновлений переменных есть дополнительные шаги, такие как перезапись переменных модели их средним значением.

Аргументы
var_list список переменных модели.

from_config

Просмотреть исходный код

@classmethod
from_config(
    config
)

Создаёт оптимизатор из его конфигурации.

Этот метод является обратным к get_config, позволяя восстановить тот же оптимизатор из словаря конфигурации.

Аргументы
config Словарь Python, обычно результат работы метода get_config.
Возвращаемое значение
Экземпляр оптимизатора.

get_config

Просмотреть исходный код

get_config()

Возвращает конфигурацию оптимизатора.

Конфигурация оптимизатора — это словарь Python (сериализуемый), содержащий конфигурацию оптимизатора. Из этой конфигурации позже можно восстановить тот же оптимизатор (без сохранения состояния).

Подклассы оптимизатора должны переопределять этот метод для включения других гиперпараметров.

Возвращаемое значение
Словарь Python.

minimize

Просмотреть исходный код

minimize(
    loss, var_list, tape=None
)

Минимизировать loss путём обновления var_list.

Этот метод просто вычисляет градиент с помощью tf.GradientTape и вызывает apply_gradients(). Если необходимо обработать градиент перед применением, то вызовите tf.GradientTape и apply_gradients() явно вместо использования этой функции.

Аргументы
loss значение для минимизации или вызываемая функция. Если вызываемая функция, то она не должна принимать аргументы и должна возвращать значение для минимизации.
var_list список или кортеж объектов Variable, которые нужно обновить, чтобы минимизировать loss.
tape (Необязательно) tf.GradientTape.
Возвращаемое значение
None

update_step

Просмотреть исходный код

update_step(
    gradient, variable
)

Шаг обновления, заданный градиентом и соответствующей переменной модели.

© 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/experimental/SGD

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API