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 | Значение с плавающей точкой или постоянный тензор с плавающей точкой, или вызываемый объект без аргументов, возвращающий фактическое значение, которое нужно использовать. Экспоненциальная скорость затухания для оценок моментов первого порядка. По умолчанию 0,9. |
beta_2 | Значение с плавающей точкой или постоянный тензор с плавающей точкой, или вызываемый объект без аргументов, возвращающий фактическое значение, которое нужно использовать. Экспоненциальная скорость затухания для оценок моментов второго порядка. По умолчанию 0,999. |
epsilon | Небольшая константа для обеспечения числовой устойчивости. Эта величина epsilon — это «epsilon hat» в статье Kingma и Ba (в формуле перед разделом 2.1), а не epsilon в алгоритме 1 статьи. По умолчанию 1e-7. |
amsgrad | Булево значение. Применять ли вариант AMSGrad этого алгоритма из статьи «Об сходимости Adam и далее». По умолчанию False. |
name | Необязательное имя для операций, создаваемых при применении градиентов. По умолчанию "Adam". |
**kwargs | Дополнительные ключевые аргументы. Разрешается использовать "clipnorm" или "clipvalue". "clipnorm" (float) ограничивает градиенты по норме; "clipvalue" (float) ограничивает градиенты по значению. |
Использование:
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 | в случае любого некорректного аргумента. |
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/keras/optimizers/Adam