Spec-Zone.ru › TensorFlow 2.3

tf.keras.optimizers.Adam

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

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

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

Просмотр псевдонимов

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

tf.optimizers.Adam

Псевдонимы совместимости для миграции

См. Руководство по миграции для получения дополнительной информации.

tf.compat.v1.keras.optimizers.Adam

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, метод «вычислительно эффективен, имеет небольшие требования к памяти, инвариантен к диагональному масштабированию градиентов и хорошо подходит для задач, больших по объёму данных/параметров».

Args
learning_rate Значение типа float или расписание, которое является 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 этого алгоритма из работы «On the Convergence of Adam and beyond». По умолчанию False.
name Необязательное имя для операций, созданных при применении градиентов. По умолчанию "Adam".
**kwargs Дополнительные аргументы. Допускается использование "clipnorm" или "clipvalue". "clipnorm" (число с плавающей точкой) ограничивает градиенты по норме; "clipvalue" (число с плавающей точкой) ограничивает градиенты по значению.

Использование:

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) также применяется к всему аккумулятору импульса. Это означает, что поведение с разреженными данными эквивалентно поведению с плотными данными (в отличие от некоторых реализаций импульса, которые игнорируют импульс, если срез переменной фактически не использовался).

Args
name Непустая строка. Имя, используемое для аккумуляторов, созданных для оптимизатора.
**kwargs Дополнительные аргументы. Допускается использование {clipnorm, clipvalue, lr, decay}. clipnorm — ограничение градиентов по норме; clipvalue — ограничение градиентов по значению; decay — включено для обратной совместимости, чтобы разрешить обратное затухание скорости обучения. lr включено для обратной совместимости; рекомендуется использовать learning_rate вместо этого.
Raises
ValueError Если имя имеет неправильный формат.
Атрибуты
iterations Переменная. Количество шагов обучения, выполненных этим оптимизатором.
weights Возвращает переменные этого оптимизатора в порядке их создания.

Методы

add_slot

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

add_slot(
    var, slot_name, initializer='zeros'
)

Добавляет новую переменную слота для var.

add_weight

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

add_weight(
    name, shape, dtype=None, initializer='zeros', trainable=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.compat.v1.VariableAggregation.NONE
)

apply_gradients

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

apply_gradients(
    grads_and_vars, name=None, experimental_aggregate_gradients=True
)

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

Это вторая часть minimize(). Она возвращает объект Operation, который применяет градиенты.

Метод суммирует градиенты от всех реплик в присутствии tf.distribute.Strategy по умолчанию. Вы можете самостоятельно агрегировать градиенты, передав experimental_aggregate_gradients=False.

Пример:

grads = tape.gradient(loss, vars)
grads = tf.distribute.get_replica_context().all_reduce('sum', grads)
# Processing aggregated gradients.
optimizer.apply_gradients(zip(grads, vars),
    experimental_aggregate_gradients=False)

Args
grads_and_vars Список пар (градиент, переменная).
name Необязательное имя для возвращаемой операции. По умолчанию, имя, переданное в конструктор Optimizer.
experimental_aggregate_gradients Нужно ли суммировать градиенты от разных реплик в присутствии tf.distribute.Strategy. Если False, ответственность за агрегирование градиентов лежит на пользователе. По умолчанию True.
Возвращаемое значение
Объект Operation, который применяет указанные градиенты. Счётчик iterations автоматически увеличится на 1.
Возможные исключения
TypeError Если grads_and_vars имеет неправильный формат.
ValueError Если ни одна из переменных не имеет градиентов.

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.

get_gradients

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

get_gradients(
    loss, params
)

Возвращает градиенты loss относительно params.

Аргументы
loss Тензор потерь.
params Список переменных.
Возвращаемое значение
Список тензоров градиентов.
Возможные исключения
ValueError В случае, если какой-либо градиент не может быть вычислен (например, если функция градиента не реализована).

get_slot

Просмотр исходного кода

get_slot(
    var, slot_name
)

get_slot_names

Просмотр исходного кода

get_slot_names()

Список имён слотов данного оптимизатора.

get_updates

Просмотр исходного кода

get_updates(
    loss, params
)

get_weights

Просмотр исходного кода

get_weights()

Возвращает текущие веса оптимизатора.

Веса оптимизатора — это его состояние (т.е. переменные). Эта функция возвращает значения весов, связанные с этим оптимизатором, в виде списка массивов NumPy. Первое значение всегда — количество итераций оптимизатора, а затем — переменные состояния оптимизатора в порядке их создания. Возвращаемый список можно использовать для загрузки состояния в аналогичные оптимизаторы с такой же параметризацией.

Например, оптимизатор RMSprop для этой простой модели возвращает список из трёх значений — счётчик итераций, а затем среднеквадратичные значения для ядра и смещения единственного слоя Dense:

opt = tf.keras.optimizers.RMSprop()
m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
m.compile(opt, loss='mse')
data = np.arange(100).reshape(5, 20)
labels = np.zeros(5)
print('Training'); results = m.fit(data, labels)
Training ...
len(opt.get_weights())
3
Возвращаемое значение
Значения весов в виде списка массивов numpy.

minimize

Просмотр исходного кода

minimize(
    loss, var_list, grad_loss=None, name=None
)

Минимизирует loss путём обновления var_list.

Этот метод просто вычисляет градиент с помощью tf.GradientTape и вызывает apply_gradients(). Если вы хотите обработать градиент перед применением, то следует вызвать tf.GradientTape и apply_gradients() явно, вместо использования этой функции.

Аргументы
loss Функция без аргументов, возвращающая значение для минимизации.
var_list Список или кортеж объектов Variable, которые нужно обновить для минимизации loss, или функция, возвращающая список или кортеж Variable объектов. Используйте функцию, когда список переменных может быть неполным до вызова minimize, так как переменные создаются в первый раз, когда вызывается loss .
grad_loss Необязательно. Объект Tensor, содержащий вычисленный градиент для loss.
name Необязательное имя возвращаемой операции.
Возвращаемое значение
Операция Operation, обновляющая переменные в var_list. Значение iterations автоматически увеличится на 1.
Исключения
ValueError Если некоторые из переменных не являются Variable объектами.

set_weights

Просмотр исходного кода

set_weights(
    weights
)

Устанавливает веса оптимизатора.

Веса оптимизатора — это его состояние (т.е. переменные). Эта функция принимает значения весов, связанные с этим оптимизатором, в виде списка массивов NumPy. Первое значение всегда — количество итераций оптимизатора, а затем — переменные состояния оптимизатора в порядке их создания. Передаваемые значения используются для установки нового состояния оптимизатора.

Например, оптимизатор RMSprop для этой простой модели принимает список из трёх значений — счётчик итераций, а затем среднеквадратичные значения для ядра и смещения единственного слоя Dense:

opt = tf.keras.optimizers.RMSprop()
m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
m.compile(opt, loss='mse')
data = np.arange(100).reshape(5, 20)
labels = np.zeros(5)
print('Training'); results = m.fit(data, labels)
Training ...
new_weights = [np.array(10), np.ones([20, 10]), np.zeros([10])]
opt.set_weights(new_weights)
opt.iterations
<tf.Variable 'RMSprop/iter:0' shape=() dtype=int64, numpy=10>
Аргументы
weights Значения весов в виде списка массивов numpy.

variables

Просмотр исходного кода

variables()

Возвращает переменные этого оптимизатора в порядке создания.

© 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.3/api_docs/python/tf/keras/optimizers/Adam

Spec-Zone.ru

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