tf.keras.optimizers.Adam
| Просмотреть исходный код на GitHub |
Оптимизатор, реализующий алгоритм Adam.
Наследуется от: Optimizer
tf.keras.optimizers.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 | Небольшая константа для обеспечения числовой устойчивости. Эта ε — это «ε шляпа» в статье Kingma и Ba (в формуле перед разделом 2.1), а не ε в Алгоритме 1 статьи. По умолчанию 1e-7. |
amsgrad | Булево значение. Применять ли вариант AMSGrad этого алгоритма из статьи «О сходимости Adam и за его пределами». По умолчанию 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, «ε» здесь обозначает «ε шляпа» в статье.
Реализация этого алгоритма в разреженном формате (используется, когда градиент — это объект 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/Adam