Spec-Zone.ru › TensorFlow 2.9

tf.keras.optimizers.experimental.Adam

Оптимизатор, реализующий алгоритм Adam.

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

tf.keras.optimizers.experimental.Adam(
    learning_rate=0.001,
    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,
    jit_compile=True,
    name='Adam',
    **kwargs
)

Оптимизация Adam — это метод стохастического градиентного спуска, основанный на адаптивной оценке моментов первого и второго порядка.

Согласно Kingma и др., 2014, этот метод «вычислительно эффективный, с небольшими требованиями к памяти, инвариантный к диагональному масштабированию градиентов и хорошо подходит для задач, больших по объёму данных/параметров».

Аргументы
learning_rate A tf.Tensor, значение с плавающей точкой, расписание, которое является tf.keras.optimizers.schedules.LearningRateSchedule, или вызываемый объект без аргументов, возвращающий фактическое значение. Скорость обучения. По умолчанию 0.001.
beta_1 Значение с плавающей точкой или постоянный тензор с плавающей точкой, или вызываемый объект без аргументов, возвращающий фактическое значение. Экспоненциальная скорость затухания для оценок моментов первого порядка. По умолчанию 0.9.
beta_2 Значение с плавающей точкой или постоянный тензор с плавающей точкой, или вызываемый объект без аргументов, возвращающий фактическое значение. Экспоненциальная скорость затухания для оценок моментов второго порядка. По умолчанию 0.999.
epsilon Маленькая константа для обеспечения числовой устойчивости. Эта ε — «ε шляпа» в статье Кинга и Ба (в формуле перед разделом 2.1), а не ε в алгоритме 1 статьи. По умолчанию 1e-7.
amsgrad Булево значение. Применять ли вариант AMSGrad этого алгоритма из статьи «Об сходимости Adam и за его пределами». По умолчанию 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 ключевые аргументы, используемые только для обратной совместимости.

Ссылка:

  • Kingma и др., 2014
  • Reddi и др., 2018 для amsgrad.

Примечания:

Значение по умолчанию 1e-7 для ε может быть не лучшим значением по умолчанию в общем случае. Например, при обучении сети Inception на ImageNet текущим хорошим выбором является 1.0 или 0.1. Обратите внимание, что поскольку Adam использует формулу перед разделом 2.1 статьи Кинга и Ба, а не формулу в алгоритме 1, «ε» здесь — «ε шляпа» в статье.

Реализация этого алгоритма для разреженных данных (используется, когда градиент — объект IndexedSlices, обычно из-за tf.gather или поиска вложения в прямом проходе) применяет импульс к срезам переменных, даже если они не использовались в прямом проходе (то есть, у них градиент равен нулю). Затухание импульса (beta1) также применяется к всему аккумулятору импульса. Это означает, что поведение в разреженных и плотных случаях эквивалентно (в отличие от некоторых реализаций импульса, которые игнорируют импульс, если срез переменной фактически не использовался).

Атрибуты
iterations Количество шагов обучения, пройденных этим optimizer.

По умолчанию итерации будут увеличиваться на единицу каждый раз при вызове apply_gradients().

learning_rate

Методы

add_variable

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

add_variable(
    shape, dtype=None, initializer='zeros', name=None
)

Создать переменную оптимизатора.

Аргументы
shape Список целых чисел, кортеж целых чисел или одномерный тензор типа int32. По умолчанию скаляр, если не указано иное.
dtype Тип данных переменной оптимизатора, которая будет создана. По умолчанию tf.keras.backend.floatx, если не указано иное.
initializer Строка или вызываемый объект. Экземпляр инициализатора.
name Имя создаваемой переменной оптимизатора.
Возвращаемое значение
Переменная оптимизатора в формате tf.Variable.

add_variable_from_reference

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

add_variable_from_reference(
    model_variable, variable_name, shape=None, initial_value=None
)

Создать переменную оптимизатора из переменной модели.

Создать переменную оптимизатора на основе информации о переменной модели. Например, в оптимизаторе SGD с моментом для каждой переменной модели создается соответствующая переменная момента той же формы и типа данных.

Аргументы
model_variable tf.Variable. Соответствующая переменная модели для создаваемой переменной оптимизатора.
variable_name Строка. Префикс имени создаваемой переменной оптимизатора. Имя создаваемой переменной будет следовать шаблону {variable_name}/{model_variable.name}, например, momemtum/dense_1.
shape Список или кортеж, по умолчанию None. Форма создаваемой переменной оптимизатора. Если None, создаваемая переменная будет иметь ту же форму, что и model_variable.
initial_value Тензор или Python-объект, преобразуемый в тензор, по умолчанию None. Начальное значение переменной оптимизатора, если None, начальное значение будет по умолчанию 0.
Возвращаемое значение
Переменная оптимизатора.

aggregate_gradients

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

aggregate_gradients(
    grads_and_vars
)

Сводка градиентов на всех устройствах.

По умолчанию мы будем выполнять reduce_sum градиентов по устройствам. Пользователи могут реализовать свою логику агрегации, переопределив этот метод.

Аргументы
grads_and_vars Список пар (градиент, переменная).
Возвращаемое значение
Список пар (градиент, переменная).

apply_gradients

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

apply_gradients(
    grads_and_vars, skip_gradients_aggregation=False
)

Применение градиентов к переменным.

Аргументы
grads_and_vars Список пар (градиент, переменная).
skip_gradients_aggregation Если True, агрегация градиентов не будет выполняться внутри оптимизатора. Обычно этот аргумент устанавливается в True, когда вы пишете пользовательский код агрегации градиентов за пределами оптимизатора.
Возвращаемое значение
None
Исключения
TypeError Если grads_and_vars имеет неправильный формат.
RuntimeError Если вызов происходит в контексте кросс-реплики.

build

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

build(
    var_list
)

Инициализация переменных оптимизатора.

Оптимизатор Adam имеет 3 типа переменных: моменты, скорости и скорость_шляпа (только если применяется amsgrad).

Аргументы
var_list список переменных модели, на которых нужно построить переменные Adam.

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 скаляр или вызываемый объект. Если вызываемый объект, то 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/optimizers/experimental/Adam

Spec-Zone.ru

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