Spec-Zone.ru › TensorFlow 2.9

tf.keras.dtensor.experimental.optimizers.SGD

Оптимизаторы, специфичные для DTensor.

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

tf.keras.dtensor.experimental.optimizers.SGD(
    learning_rate=0.01,
    momentum=0.0,
    nesterov=False,
    amsgrad=False,
    gradients_clip_option=None,
    ema_option=None,
    jit_compile=False,
    name='SGD',
    mesh=None
)

Основные изменения в этом классе заключаются в том, что вся логика инициализации переменных будет учитывать меш/макет.

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

Правило обновления параметра 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 Значение типа float, или расписание, являющееся 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. Кроме того, если устройство GPU не найдено, этот флаг будет проигнорирован.
**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 и др., 2013.
Атрибуты
iterations Количество шагов обучения, которые выполнил этот optimizer.

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

learning_rate

Методы

add_variable

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

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

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

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

add_variable_from_reference

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

add_variable_from_reference(
    model_variable, variable_name, initial_value=None
)

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

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

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

apply_gradients

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

apply_gradients(
    grads_and_vars
)

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

Аргументы
grads_and_vars Список пар (градиент, переменная).
Возвращает
None
Возможные исключения
TypeError Если grads_and_vars имеет неправильный формат.

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 Tensor или вызываемая функция. Если вызываемая функция, 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/dtensor/experimental/optimizers/SGD

Spec-Zone.ru

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