tf.keras.optimizers.AdamW
Оптимизатор, реализующий алгоритм AdamW.
Наследуется от: Adam, Optimizer
tf.keras.optimizers.AdamW(
learning_rate=0.001,
weight_decay=0.004,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07,
amsgrad=False,
clipnorm=None,
clipvalue=None,
global_clipnorm=None,
use_ema=False,
ema_momentum=0.99,
ema_overwrite_frequency=None,
loss_scale_factor=None,
gradient_accumulation_steps=None,
name='adamw',
**kwargs
)
Оптимизация AdamW — это метод стохастического градиентного спуска, основанный на адаптивном оценивании моментов первого и второго порядка с добавлением метода для распада весов, как описано в статье «Регуляризация распада весов с развязкой» авторами Loshchilov, Hutter et al., 2019.
Согласно Kingma et al., 2014, базовый метод Adam «...вычислительно эффективен, имеет низкие требования к памяти, инвариантен к диагональному масштабированию градиентов и хорошо подходит для задач с большими объемами данных/параметров».
| Аргументы | |
|---|---|
learning_rate | Вещественное число, экземпляр keras.optimizers.schedules.LearningRateSchedule или вызываемый объект, принимающий на вход без аргументов и возвращающий фактическое значение для использования. Скорость обучения. По умолчанию 0.001. |
beta_1 | Вещественное число или постоянный тензор с вещественным значением, или вызываемый объект, принимающий на вход без аргументов и возвращающий фактическое значение для использования. Экспоненциальная скорость затухания для оценок первого момента. По умолчанию 0.9. |
beta_2 | Вещественное число или постоянный тензор с вещественным значением, или вызываемый объект, принимающий на вход без аргументов и возвращающий фактическое значение для использования. Экспоненциальная скорость затухания для оценок второго момента. По умолчанию 0.999. |
epsilon | Малая константа для обеспечения числовой устойчивости. Эта ε — это "ε шляпа" в статье Kingma и Ba (в формуле перед разделом 2.1), а не ε в алгоритме 1 статьи. По умолчанию 1e-7. |
amsgrad | Булево значение. Применять ли вариант AMSGrad этого алгоритма из статьи «О сходимости Adam и далее». По умолчанию False. |
name | Строка. Имя, используемое для весов накопителя импульса, созданных оптимизатором. |
weight_decay | Вещественное число. Если установлено, применяется распад весов. |
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() это происходит автоматически после последней эпохи, и вам ничего не нужно делать. |
loss_scale_factor | Вещественное число или None. Если вещественное число, масштабирующий множитель будет умножать потерю перед вычислением градиентов, а обратный масштабирующий множитель будет умножать градиенты перед обновлением переменных. Полезно для предотвращения подтекания во время обучения с смешанной точностью. В качестве альтернативы keras.optimizers.LossScaleOptimizer автоматически установит масштабирующий множитель потерь. |
gradient_accumulation_steps | Целое число или None. Если целое число, переменные модели и оптимизатора не будут обновляться на каждом шаге; вместо этого они будут обновляться каждые gradient_accumulation_steps шаги, используя среднее значение градиентов с момента последнего обновления. Это известно как «накопление градиентов». Это может быть полезно, когда размер пакета очень мал, для снижения шума градиента на каждом шаге обновления. |
Ссылки:
- Loshchilov et al., 2019
-
Kingma et al., 2014 для
adam -
Reddi et al., 2018 для
amsgrad.
| Атрибуты | |
|---|---|
learning_rate | |
variables | |
Методы
add_variable
add_variable(
shape,
initializer='zeros',
dtype=None,
aggregation='mean',
name=None
)
add_variable_from_reference
add_variable_from_reference(
reference_variable, name=None, initializer='zeros'
)
Добавить переменную, заполненную нулями, с формой и типом данных переменной-ссылки.
apply
apply(
grads, trainable_variables=None
)
Обновить обучаемые переменные в соответствии с предоставленными значениями градиента.
grads должна быть списком тензоров градиента с однозначным соответствием списку переменных, с которыми был построен оптимизатор.
trainable_variables может быть предоставлен при первом вызове для построения оптимизатора.
apply_gradients
apply_gradients(
grads_and_vars
)
assign
assign(
variable, value
)
Присвоить значение переменной.
Это следует использовать в оптимизаторах вместо variable.assign(value) для поддержки оптимизаций, специфичных для бэкенда. Обратите внимание, что переменная может быть переменной модели или переменной оптимизатора; это может быть переменная родного бэкенда или переменная Keras.
| Аргументы | |
|---|---|
variable | Переменная для обновления. |
value | Значение, которое нужно добавить к переменной. |
assign_add
assign_add(
variable, value
)
Добавить значение к переменной.
Это следует использовать в оптимизаторах вместо variable.assign_add(value) для поддержки оптимизаций, специфичных для бэкенда. Обратите внимание, что переменная может быть переменной модели или переменной оптимизатора; это может быть переменная родного бэкенда или переменная Keras.
| Аргументы | |
|---|---|
variable | Переменная для обновления. |
value | Значение, которое нужно добавить к переменной. |
assign_sub
assign_sub(
variable, value
)
Вычесть значение из переменной.
Это следует использовать в оптимизаторах вместо variable.assign_sub(value) для поддержки оптимизаций, специфичных для бэкенда. Обратите внимание, что переменная может быть переменной модели или переменной оптимизатора; это может быть переменная родного бэкенда или переменная Keras.
| Args | |
|---|---|
variable | Переменная для обновления. |
value | Значение, которое нужно добавить к переменной. |
build
build(
var_list
)
Инициализировать переменные оптимизатора.
Оптимизатор Adam имеет 3 типа переменных: импульсы, скорости и velocity_hat (устанавливается только при использовании amsgrad).
| Args | |
|---|---|
var_list | список переменных модели для построения переменных Adam. |
exclude_from_weight_decay
exclude_from_weight_decay(
var_list=None, var_names=None
)
Исключить переменные из распада весов.
Этот метод должен быть вызван перед вызовом метода build оптимизатора. Вы можете указать конкретные переменные для исключения или задать список строк как ключевые слова. Если любое из этих слов присутствует в имени переменной, она исключается.
| Args | |
|---|---|
var_list | Список переменных, которые нужно исключить из распада весов. |
var_names | Список строк. Если какая-либо строка из var_names присутствует в имени переменной модели, эта переменная исключается из распада весов. Например, var_names=['bias'] исключает все переменные смещения из распада весов. |
finalize_variable_values
finalize_variable_values(
var_list
)
Установить конечное значение обучаемых переменных модели.
Иногда перед окончанием обновления переменных необходимо выполнить дополнительные шаги, например, заменить переменные модели их средним значением.
| Args | |
|---|---|
var_list | список переменных модели. |
from_config
@classmethod
from_config(
config, custom_objects=None
)
Создает оптимизатор из его конфигурации.
Этот метод является обратным к методу get_config и позволяет создать тот же оптимизатор из словаря конфигурации.
| Args | |
|---|---|
config | Словарь Python, обычно результат вызова метода get_config. |
custom_objects | Словарь Python, сопоставляющий имена дополнительным пользовательским объектам Python, необходимым для повторного создания этого оптимизатора. |
| Returns | |
|---|---|
| Экземпляр оптимизатора. |
get_config
get_config()
Возвращает конфигурацию оптимизатора.
Конфигурация оптимизатора — это словарь Python (сериализуемый), содержащий конфигурацию оптимизатора. Позже из этой конфигурации можно повторно создать тот же оптимизатор (без сохранения состояния).
Подклассы оптимизатора должны переопределять этот метод, чтобы включать другие гиперпараметры.
| Returns | |
|---|---|
| Словарь Python. |
load_own_variables
load_own_variables(
store
)
Устанавливает состояние объекта оптимизатора.
save_own_variables
save_own_variables(
store
)
Получить состояние объекта оптимизатора.
scale_loss
scale_loss(
loss
)
Масштабировать потерю перед вычислением градиентов.
Масштабирует потерю перед вычислением градиентов в train_step. Это в первую очередь полезно при обучении с использованием смешанной точности для предотвращения числового подтекания.
set_weights
set_weights(
weights
)
Установить веса оптимизатора.
stateless_apply
stateless_apply(
optimizer_variables, grads, trainable_variables
)
update_step
update_step(
gradient, variable, learning_rate
)
Обновление шага с учетом градиента и связанной переменной модели.
© 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/api_docs/python/tf/keras/optimizers/AdamW