Spec-Zone.ru › TensorFlow

tf.keras.mixed_precision.LossScaleOptimizer

Оптимизатор, динамически масштабируемый функцию потерь для предотвращения потери значимости.

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

Псевдонимы

Основные псевдонимы

tf.keras.optimizers.LossScaleOptimizer

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

trainable_variables можно передать при первом вызове для создания оптимизатора.

apply_gradients

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

apply_gradients(
    grads_and_vars
)

assign

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

assign(
    variable, value
)

Присваивает переменной значение.

В оптимизаторах следует использовать этот метод вместо variable.assign(value), чтобы поддерживать специфичные для backend оптимизации. Обратите внимание: переменная может быть переменной модели или оптимизатора; это может быть собственная переменная backend или переменная Keras.

Аргументы
variable Переменная для обновления.
value Значение, добавляемое к переменной.

assign_add

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

assign_add(
    variable, value
)

Добавляет значение к переменной.

В оптимизаторах следует использовать этот метод вместо variable.assign_add(value), чтобы поддерживать специфичные для backend оптимизации. Обратите внимание: переменная может быть переменной модели или оптимизатора; это может быть собственная переменная backend или переменная Keras.

Аргументы
variable Переменная для обновления.
value Значение, добавляемое к переменной.

assign_sub

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

assign_sub(
    variable, value
)

Вычитает значение из переменной.

В оптимизаторах следует использовать этот метод вместо variable.assign_sub(value), чтобы поддерживать специфичные для backend оптимизации. Обратите внимание: переменная может быть переменной модели или оптимизатора; это может быть собственная переменная backend или переменная 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
)

Исключает переменные из затухания весов.

Этот метод нужно вызвать до вызова метода build оптимизатора. Можно указать конкретные переменные для исключения или задать список строк в качестве ключевых слов: если одно из них встречается в имени переменной, она исключается.

Аргументы
var_list Список объектов Variable, исключаемых из затухания весов.
var_names Список строк. Если любая строка из var_names встречается в имени переменной модели, эта переменная исключается из затухания весов. Например, var_names=['bias'] исключает все переменные смещения из затухания весов.

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
)

Масштабирует функцию потерь перед вычислением градиентов.

Масштабирует функцию потерь перед вычислением градиентов в 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/mixed_precision/LossScaleOptimizer

Spec-Zone.ru

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