Spec-Zone.ru › TensorFlow

tf.compat.v1.train.AdamOptimizer

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

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

tf.compat.v1.train.AdamOptimizer(
    learning_rate=0.001,
    beta1=0.9,
    beta2=0.999,
    epsilon=1e-08,
    use_locking=False,
    name='Adam'
)

Мигрировать на TF2

Внимание: Данный API был разработан для TensorFlow v1. Продолжайте чтение, чтобы узнать, как мигрировать с этого API на эквивалент в TensorFlow v2. Смотрите руководство по миграции TensorFlow v1 на TensorFlow v2 для инструкций по миграции остальной части кода.

tf.compat.v1.train.AdamOptimizer совместим с режимом eager и tf.function. Когда выполнение eager включено, learning_rate, beta1, beta2 и epsilon могут быть вызываемыми объектами, которые принимают на вход ничего и возвращают фактическое значение для использования. Это может быть полезно для изменения этих значений при различных вызовах функций оптимизатора.

Для перехода к стилю TF2 используйте tf.keras.optimizers.Adam вместо этого. Обратите внимание, что из-за различий в реализации tf.keras.optimizers.Adam и tf.compat.v1.train.AdamOptimizer могут иметь незначительные различия в результатах с плавающей запятой, даже если формула, используемая для обновлений переменных, соответствует.

Структурное сопоставление с родным TF2

До:

optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate=0.001)

После:

optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)

Как сопоставить аргументы

Имя аргумента TF1 Имя аргумента TF2 Примечание
learning_rate learning_rate Будьте внимательны при установке learning_rate как значения тензора, вычисленного по глобальному шагу. В TF1 это обычно подразумевало динамическую скорость обучения и вычислялось заново на каждом шаге. В TF2 (eager + функция) оно будет обрабатываться как скалярное значение, которое вычисляется только один раз вместо символьного плейсхолдера, который вычисляется каждый раз.
beta1 beta_1
beta2 beta_2
epsilon epsilon Значение по умолчанию в TF1 равно 1e-08, а в TF2 равно 1e-07.
use_locking N/A Не применимо в TF2.

Пример использования до и после

До:

x = tf.Variable([1,2,3], dtype=tf.float32)
grad = tf.constant([0.1, 0.2, 0.3])
optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate=0.001)
optimizer.apply_gradients(zip([grad], [x]))

После:

x = tf.Variable([1,2,3], dtype=tf.float32)
grad = tf.constant([0.1, 0.2, 0.3])
optimizer = tf.keras.optimizers.Adam(learning_rate=0.001)
optimizer.apply_gradients(zip([grad], [x]))

Описание

Используется в блокнотах

Используется в руководстве Используется в учебных материалах
  • Миграция механизма устойчивости к сбоям
  • Миграция сохранения контрольных точек
  • Миграция оценки
  • Миграция TensorBoard: инструментария визуализации TensorFlow
  • Учебник по ранжированию в TF-Agents
  • Checkpointer и PolicySaver
  • Буферы повторения
  • DQN C51/Rainbow
  • Линейная регрессия с эффектами смешивания в {TF Probability, R, Stan}
Ссылки
Adam - Метод стохастической оптимизации: Kingma et al., 2015 (pdf)
Аргументы
learning_rate Тензор или значение с плавающей запятой. Скорость обучения.
beta1 Вещественное значение или тензор постоянного вещественного значения. Скорость экспоненциального затухания для оценок первого момента.
beta2 Вещественное значение или тензор постоянного вещественного значения. Скорость экспоненциального затухания для оценок второго момента.
epsilon Малая константа для обеспечения числовой устойчивости. Эта epsilon — это «epsilon hat» в статье Kingma и Ba (в формуле перед разделом 2.1), а не epsilon в алгоритме 1 статьи.
use_locking Если True, используйте блокировки для операций обновления.
name Необязательное имя для операций, созданных при применении градиентов. По умолчанию «Adam».

Методы

apply_gradients

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

apply_gradients(
    grads_and_vars,
    global_step=None,
    name=None,
    skip_gradients_aggregation=False
)

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

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

@compatibility(TF2)

Как сопоставить аргументы

Имя аргумента TF1 Имя аргумента TF2 Примечание
grads_and_vars grads_and_vars -
global_step Не поддерживается. Используйте optimizer.iterations
name name. -
Аргументы
grads_and_vars Список пар (градиент, переменная), как возвращается методом compute_gradients().
global_step Необязательный Variable, который увеличивается на единицу после обновления переменных.
name Необязательное имя для возвращаемой операции. По умолчанию — имя, переданное конструктору Optimizer.
skip_gradients_aggregation Если True, агрегирование градиентов не будет выполняться внутри оптимизатора. Обычно этот аргумент устанавливается в True, когда вы пишете пользовательский код, агрегирующий градиенты вне оптимизатора.
Возвращаемое значение
Operation, который применяет указанные градиенты. Если global_step не равно None, эта операция также увеличивает значение global_step.
Исключения
TypeError Если grads_and_vars имеет неправильный формат.
ValueError Если у ни одной из переменных нет градиентов.
RuntimeError Если следует использовать _distributed_apply() вместо этого.

compute_gradients

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

compute_gradients(
    loss,
    var_list=None,
    gate_gradients=GATE_OP,
    aggregation_method=None,
    colocate_gradients_with_ops=False,
    grad_loss=None
)

Вычислить градиенты loss для переменных в var_list.

Мигрировать на TF2

Внимание: Данный API был разработан для TensorFlow v1. Продолжайте чтение, чтобы узнать, как мигрировать с этого API на эквивалент в TensorFlow v2. Смотрите руководство по миграции TensorFlow v1 на TensorFlow v2 для инструкций по миграции остальной части кода.

tf.keras.optimizers.Optimizer в TF2 не предоставляет метод compute_gradients, и вам следует использовать tf.GradientTape для получения градиентов:

@tf.function
def train step(inputs):
  batch_data, labels = inputs
  with tf.GradientTape() as tape:
    predictions = model(batch_data, training=True)
    loss = tf.keras.losses.CategoricalCrossentropy(
        reduction=tf.keras.losses.Reduction.NONE)(labels, predictions)
  gradients = tape.gradient(loss, model.trainable_variables)
  optimizer.apply_gradients(zip(gradients, model.trainable_variables))

Аргументы: loss: A Tensor, содержащий значение, которое нужно минимизировать, или вызываемая функция без аргументов, возвращающая значение для минимизации. При включённом режиме выполнения eager, это должна быть вызываемая функция. var_list: Необязательный список или кортеж tf.Variable для обновления, чтобы минимизировать loss. По умолчанию, используется список переменных, собранных в графе по ключу GraphKeys.TRAINABLE_VARIABLES. gate_gradients: Как выполнять управление вычислением градиентов. Может быть GATE_NONE, GATE_OP или GATE_GRAPH. aggregation_method: Указывает метод объединения градиентных слагаемых. Допустимые значения определены в классе AggregationMethod. colocate_gradients_with_ops: Если True, попытаться разместить градиенты вместе с соответствующей операцией. grad_loss: Необязательный. A Tensor, хранящий градиент, вычисленный для loss.

Возвращает: Список пар (градиент, переменная). Переменная всегда присутствует, но градиент может быть None.

Возможные исключения: TypeError: Если var_list содержит что-либо кроме объектов Variable. ValueError: Если некоторые аргументы некорректны. RuntimeError: Если вызов осуществляется с включённым режимом eager выполнения и loss не является вызываемой функцией.

@compatibility(eager) При включённом режиме eager выполнения, gate_gradients, aggregation_method и colocate_gradients_with_ops игнорируются.

Описание

Это первая часть minimize(). Она возвращает список пар (градиент, переменная), где «градиент» — это градиент для «переменной». Обратите внимание, что «градиент» может быть Tensor, IndexedSlices или None, если для данной переменной нет градиента.

get_name

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

get_name()

get_slot

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

get_slot(
    var, name
)

Возвращает слот с именем name, созданный для var оптимизатором.

Некоторые подклассы Optimizer используют дополнительные переменные. Например, Momentum и Adagrad используют переменные для накопления обновлений. Этот метод предоставляет доступ к этим Variable объектам, если по какой-то причине они нужны.

Используйте get_slot_names() для получения списка имён слотов, созданных Optimizer.

Аргументы
var Переменная, переданная в minimize() или apply_gradients().
name Строка.
Возвращает
Переменная Variable для слота, если она была создана, None в противном случае.

get_slot_names

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

get_slot_names()

Возвращает список имён слотов, созданных Optimizer.

См. get_slot().

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

minimize

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

minimize(
    loss,
    global_step=None,
    var_list=None,
    gate_gradients=GATE_OP,
    aggregation_method=None,
    colocate_gradients_with_ops=False,
    name=None,
    grad_loss=None
)

Добавляет операции для минимизации loss, обновляя var_list.

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

Аргументы
loss A Tensor, содержащий значение для минимизации.
global_step Необязательный Variable, который увеличивается на единицу после обновления переменных.
var_list Необязательный список или кортеж объектов Variable для обновления, чтобы минимизировать loss. По умолчанию, используется список переменных, собранных в графе по ключу GraphKeys.TRAINABLE_VARIABLES.
gate_gradients Как выполнять управление вычислением градиентов. Может быть GATE_NONE, GATE_OP или GATE_GRAPH.
aggregation_method Указывает метод объединения градиентных слагаемых. Допустимые значения определены в классе AggregationMethod.
colocate_gradients_with_ops Если True, попытаться разместить градиенты вместе с соответствующей операцией.
name Необязательное имя возвращаемой операции.
grad_loss Необязательный. A Tensor, хранящий градиент, вычисленный для loss.
Возвращает
Операция, которая обновляет переменные в var_list. Если global_step не был None, эта операция также увеличивает global_step.
Возможные исключения
ValueError Если некоторые переменные не являются объектами Variable.

совместимость с режимом eager

При включённом режиме eager выполнения, loss должна быть Python-функцией без аргументов, вычисляющей значение для минимизации. Минимизация (и вычисление градиента) выполняется относительно элементов var_list, если оно не None, иначе — относительно всех обучаемых переменных, созданных во время выполнения функции loss. gate_gradients, aggregation_method, colocate_gradients_with_ops и grad_loss игнорируются при включённом режиме eager выполнения.

variables

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

variables()

Список переменных, которые кодируют текущее состояние Optimizer.

Включает переменные слотов и дополнительные глобальные переменные, созданные оптимизатором в текущем стандартном графе.

Возвращает
Список переменных.
Переменные класса
GATE_GRAPH 2
GATE_NONE 0
GATE_OP 1

© 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/api_docs/python/tf/compat/v1/train/AdamOptimizer

Spec-Zone.ru

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