tf.keras.optimizers.Adafactor
Оптимизатор, реализующий алгоритм Adafactor.
Наследуется от: Optimizer
tf.keras.optimizers.Adafactor(
learning_rate=0.001,
beta_2_decay=-0.8,
epsilon_1=1e-30,
epsilon_2=0.001,
clip_threshold=1.0,
relative_step=True,
weight_decay=None,
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='adafactor',
**kwargs
)
Adafactor обычно используется в задачах NLP и имеет преимущество в экономии памяти, так как сохраняет только частичную информацию о предыдущих градиентах.
Настройка по умолчанию основана на оригинальной статье (см. ссылку). Когда градиенты имеют размерность > 2, оптимизатор Adafactor удаляет последние 2 измерения в своих переменных-аккумуляторах отдельно.
| Аргументы | |
|---|---|
learning_rate | Число с плавающей точкой, экземпляр keras.optimizers.schedules.LearningRateSchedule или вызываемая функция без аргументов, возвращающая фактическое значение для использования. Скорость обучения. По умолчанию 0.001. |
beta_2_decay | Число с плавающей точкой, по умолчанию -0.8. Скорость затухания beta_2. |
epsilon_1 | Число с плавающей точкой, по умолчанию 1e-30. Небольшое смещение, чтобы уберечь знаменатель от 0. |
epsilon_2 | Число с плавающей точкой, по умолчанию 1e-3. Небольшое смещение, чтобы избежать слишком малой скорости обучения со временем. |
clip_threshold | Число с плавающей точкой, по умолчанию 1.0. Порог ограничения. Это часть алгоритма Adafactor, независимо от clipnorm, clipvalue и global_clipnorm. |
relative_step | Логическое значение, по умолчанию True. Если learning_rate является константой и relative_step=True, скорость обучения будет корректироваться на основе текущих итераций. Это - стандартное затухание скорости обучения в Adafactor. |
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 шаги, используя среднее значение градиентов с момента последнего обновления. Это известно как "накопление градиентов". Это может быть полезно, когда размер вашей партии очень мал, чтобы уменьшить шум градиента на каждом шаге обновления. |
Ссылка:
| Атрибуты | |
|---|---|
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 должна быть списком тензоров градиента с 1:1 соответствием списку переменных, с которыми был построен оптимизатор.
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.
| Аргументы | |
|---|---|
variable | Обновляемая переменная. |
value | Значение, которое нужно вычесть из переменной. |
build
build(
var_list
)
Инициализация переменных оптимизатора.
Оптимизатор Adam имеет 3 типа переменных: импульс, скорость и скорость_hat (устанавливается только при использовании amsgrad).
END_OF_DOCUMENT_MARKER| Аргументы | |
|---|---|
var_list | список переменных модели, на основе которых строить переменные Adam. |
data-text="exclude_from_weight_decay" id="exclude_from_weight_decay" tabindex="-1">exclude_from_weight_decay
exclude_from_weight_decay(
var_list=None, var_names=None
)
Исключить переменные из расчёта weight decay.
Этот метод необходимо вызвать перед вызовом метода build оптимизатора. Вы можете указать конкретные переменные для исключения или список строк-ключевых слов. Если какое-либо из этих слов присутствует в имени переменной, то переменная исключается.
| Аргументы | |
|---|---|
var_list | Список Variable, которые исключить из расчёта weight decay. |
var_names | Список строк. Если любая строка из var_names встречается в имени переменной модели, то эта переменная исключается из расчёта weight decay. Например, var_names=['bias'] исключает все переменные смещения (bias) из расчёта weight decay. |
data-text="finalize_variable_values" id="finalize_variable_values" tabindex="-1">finalize_variable_values
finalize_variable_values(
var_list
)
Установить конечное значение обучаемых переменных модели.
Иногда перед завершением обновления переменных выполняются дополнительные шаги, такие как переопределение переменных модели средним значением.
| Аргументы | |
|---|---|
var_list | список переменных модели. |
data-text="from_config" id="from_config" tabindex="-1">from_config
@classmethod
from_config(
config, custom_objects=None
)
Создаёт оптимизатор из его конфигурации.
Этот метод является обратным к методу get_config, позволяя восстановить тот же оптимизатор из словаря конфигурации.
| Аргументы | |
|---|---|
config | Словарь Python, обычно результат вызова метода get_config. |
custom_objects | Словарь Python, сопоставляющий имена дополнительным пользовательским объектам Python, необходимым для повторного создания этого оптимизатора. |
| Возвращаемое значение | |
|---|---|
| Экземпляр оптимизатора. |
data-text="get_config" id="get_config" tabindex="-1">get_config
get_config()
Возвращает конфигурацию оптимизатора.
Конфигурация оптимизатора — это словарь Python (сериализуемый), содержащий настройки оптимизатора. Из этой конфигурации позже можно повторно создать тот же оптимизатор (без сохранённого состояния).
Подклассы оптимизатора должны переопределять этот метод, чтобы включить другие гиперпараметры.
| Возвращаемое значение | |
|---|---|
| Словарь Python. |
data-text="load_own_variables" id="load_own_variables" tabindex="-1">load_own_variables
load_own_variables(
store
)
Устанавливает состояние этого объекта оптимизатора.
data-text="save_own_variables" id="save_own_variables" tabindex="-1">save_own_variables
save_own_variables(
store
)
Получает состояние этого объекта оптимизатора.
data-text="scale_loss" id="scale_loss" tabindex="-1">scale_loss
scale_loss(
loss
)
Масштабирует функцию потерь перед вычислением градиентов.
Масштабирует функцию потерь перед вычислением градиентов в train_step. Это в первую очередь полезно при обучении с использованием смешанной точности, чтобы предотвратить численный подтек.
data-text="set_weights" id="set_weights" tabindex="-1">set_weights
set_weights(
weights
)
Устанавливает веса оптимизатора.
data-text="stateless_apply" id="stateless_apply" tabindex="-1">stateless_apply
stateless_apply(
optimizer_variables, grads, trainable_variables
)
data-text="update_step" id="update_step" tabindex="-1">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/Adafactor