tf.keras.optimizers.legacy.Adam
Оптимизатор, реализующий алгоритм Adam.
Наследуется от: Adam, Optimizer
tf.keras.optimizers.legacy.Adam(
learning_rate=0.001,
beta_1=0.9,
beta_2=0.999,
epsilon=1e-07,
amsgrad=False,
name='Adam',
**kwargs
)
Оптимизация Adam — это метод стохастического градиентного спуска, основанный на адаптивной оценке моментов первого и второго порядка.
Согласно Kingma et al., 2014, метод «вычислительно эффективен, имеет небольшие требования к памяти, инвариантен к диагональному масштабированию градиентов и хорошо подходит для задач, больших по объёму данных/параметров».
| Аргументы | |
|---|---|
learning_rate | Значение с плавающей запятой, или расписание, являющееся tf.keras.optimizers.schedules.LearningRateSchedule, или функция, не принимающая аргументов и возвращающая фактическое используемое значение. Скорость обучения. По умолчанию 0,001. |
beta_1 | Вещественное значение или постоянный тензор с плавающей запятой, или функция, не принимающая аргументов и возвращающая фактическое используемое значение. Экспоненциальная скорость затухания для оценок момента 1-го порядка. По умолчанию 0,9. |
beta_2 | Вещественное значение или постоянный тензор с плавающей запятой, или функция, не принимающая аргументов и возвращающая фактическое используемое значение. Экспоненциальная скорость затухания для оценок момента 2-го порядка. По умолчанию 0,999. |
epsilon | Небольшая константа для обеспечения числовой устойчивости. Этот параметр epsilon — это «epsilon hat» в статье Kingma и Ba (в формуле непосредственно перед разделом 2.1), а не epsilon в Алгоритме 1 статьи. По умолчанию 1e-7. |
amsgrad | Булево значение. Применять ли вариант AMSGrad этого алгоритма из статьи "On the Convergence of Adam and beyond". По умолчанию False. |
name | Необязательное имя для операций, созданных при применении градиентов. По умолчанию "Adam". |
**kwargs | Дополнительные аргументы. Разрешены аргументы clipvalue, clipnorm, global_clipnorm. Если задан clipvalue (вещественное число), градиент каждого веса ограничен значением, не превышающим это значение. Если задан clipnorm (вещественное число), градиент каждого веса ограничен индивидуально, так чтобы его норма не превышала этого значения. Если задан global_clipnorm (вещественное число), градиент всех весов ограничен по глобальной норме значением, не превышающим это значение. |
Использование:
opt = tf.keras.optimizers.Adam(learning_rate=0.1) var1 = tf.Variable(10.0) loss = lambda: (var1 ** 2)/2.0 # d(loss)/d(var1) == var1 step_count = opt.minimize(loss, [var1]).numpy() # The first step is `-learning_rate*sign(grad)` var1.numpy() 9.9
Ссылка:
- Kingma et al., 2014
-
Reddi et al., 2018 для
amsgrad.
Примечания:
Значение по умолчанию 1e-7 для epsilon может не быть хорошим по умолчанию в целом. Например, при обучении сети Inception на ImageNet, текущий хороший выбор — 1.0 или 0.1. Обратите внимание, что поскольку Adam использует формулировку, предшествующую разделу 2.1 статьи Kingma и Ba, а не формулировку в Алгоритме 1, «epsilon», о котором здесь говорится, — это «epsilon hat» в статье.
Реализация этого алгоритма с использованием разреженных данных (используется, когда градиент — объект IndexedSlices, обычно из-за tf.gather или поиска вложения в прямом проходе) применяет импульс к фрагментам переменных, даже если они не использовались в прямом проходе (то есть у них градиент равен нулю). Затухание импульса (beta1) также применяется ко всему аккумулятору импульса. Это означает, что поведение в разреженном случае эквивалентно поведению в плотной реализации (в отличие от некоторых реализаций импульса, которые игнорируют импульс, если фрагмент переменной фактически не использовался).
| Исключения | |
|---|---|
ValueError | в случае любого неверного аргумента. |
© 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/legacy/Adam