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. По умолчанию итерации будут увеличиваться на единицу каждый раз, когда вызывается |
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