tf.keras.mixed_precision.LossScaleOptimizer
Оптимизатор, который динамически масштабирует потерю для предотвращения потери точности из-за подпорогового значения.
Наследуется от: Optimizer
tf.keras.mixed_precision.LossScaleOptimizer(
inner_optimizer,
initial_scale=(2.0 ** 15),
dynamic_growth_steps=2000,
**kwargs
)
Используется в ноутбуках
| Используется в руководстве |
|---|
Масштабирование потерь — это техника предотвращения потери точности из-за подпорогового значения в промежуточных градиентах при использовании float16. Для предотвращения потери точности, потеря умножается (или «масштабируется») на определённый множитель, называемый «масштабом потерь», что приводит к масштабированию промежуточных градиентов на масштаб потерь. Конечные градиенты делятся (или «рассмасштабиваются») на масштаб потерь, чтобы вернуть их к исходному значению.
LossScaleOptimizer оборачивает другой оптимизатор и применяет к нему динамическое масштабирование потерь. Этот масштаб потерь динамически обновляется со временем следующим образом:
- На любом шаге обучения, если встречается бесконечный градиент, масштаб потерь уменьшается вдвое, и шаг обучения пропускается.
- Если
dynamic_growth_stepsпроизошли с момента последнего обновления масштаба потерь, и не произошло бесконечных градиентов, масштаб потерь удваивается.
| Аргументы | |
|---|---|
inner_optimizer | Экземпляр keras.optimizers.Optimizer для обертывания. |
initial_scale | Вещественное число. Начальный масштаб потерь. Этот масштаб будет обновляться во время обучения. Рекомендуется, чтобы это было очень большое число, так как масштаб потерь, который слишком велик, уменьшается гораздо быстрее, чем масштаб потерь, который слишком мал, увеличивается. |
dynamic_growth_steps | Целое число. Как часто обновлять масштаб вверх. После каждых dynamic_growth_steps шагов с конечными градиентами масштаб потерь удваивается. |
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
)
check_finite
check_finite(
grads
)
exclude_from_weight_decay
exclude_from_weight_decay(
var_list=None, var_names=None
)
Исключить переменные из расчёта weight decay.
Этот метод необходимо вызвать до вызова метода build оптимизатора. Можно указать конкретные переменные для исключения или список строк-ключей. Если любая из этих строк встречается в имени переменной, то переменная исключается.
| Аргументы | |
|---|---|
var_list | Список переменных, которые нужно исключить из расчёта weight decay. |
var_names | Список строк. Если любая строка из var_names встречается в имени переменной модели, то эта переменная исключается из расчёта weight decay. Например, var_names=['bias'] исключает все переменные смещения из расчёта weight decay. |
finalize_variable_values
finalize_variable_values(
var_list
)
Установить конечное значение обучаемых переменных модели.
Иногда перед завершением обновления переменных требуется выполнить дополнительные действия, например, переопределить переменные модели их средним значением.
| Аргументы | |
|---|---|
var_list | Список переменных модели. |
from_config
@classmethod
from_config(
config, custom_objects=None
)
Создаёт оптимизатор по его конфигурации.
Этот метод является обратным get_config, позволяющим создать тот же оптимизатор из словаря конфигурации.
| Аргументы | |
|---|---|
config | Словарь Python, обычно результат работы метода get_config. |
custom_objects | Словарь Python, сопоставляющий имена дополнительным пользовательским Python-объектам, необходимым для реконструирования оптимизатора. |
| Возвращает | |
|---|---|
| Экземпляр оптимизатора. |
get_config
get_config()
Возвращает конфигурацию оптимизатора.
Конфигурация оптимизатора — это словарь Python (сериализуемый), содержащий конфигурацию оптимизатора. Этот оптимизатор можно будет позже восстановить (без сохранённого состояния) по этой конфигурации.
Подклассы оптимизаторов должны переопределить этот метод, чтобы включить другие гиперпараметры.
| Возвращает | |
|---|---|
| Словарь Python. |
load_own_variables
load_own_variables(
store
)
Установить состояние объекта оптимизатора.
save_own_variables
save_own_variables(
store
)
Получить состояние объекта оптимизатора.
scale_loss
scale_loss(
loss
)
Масштабировать потерю перед вычислением градиентов.
Масштабирует потерю перед вычислением градиентов в оптимизаторе. Это преимущественно полезно во время обучения с применением смешанной точности, чтобы предотвратить численные подпотоки.
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/mixed_precision/LossScaleOptimizer