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 mode и tf.function. Если eager execution включён, 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 + function) значение будет рассматриваться как скаляр, вычисляемый только один раз, а не как символический заполнитель, вычисляемый каждый раз.
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 и др., 2015 (PDF)
Аргументы
learning_rate Тензор или значение с плавающей запятой. Скорость обучения.
beta1 Значение типа float или тензор-константа типа float. Скорость экспоненциального затухания оценок первого момента.
beta2 Значение типа float или тензор-константа типа float. Скорость экспоненциального затухания оценок второго момента.
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: тензор, содержащий минимизируемое значение, или вызываемый объект без аргументов, возвращающий минимизируемое значение. Если eager execution включён, это должен быть вызываемый объект. 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: необязательный Tensor, содержащий градиент, вычисленный для loss.

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

Исключения: TypeError: если var_list содержит что-либо, кроме объектов Variable. ValueError: если некоторые аргументы недопустимы. RuntimeError: если метод вызван при включённом eager execution, а loss не является вызываемым объектом.

@compatibility(eager) Если eager execution включён, 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 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 Необязательный Tensor, содержащий градиент, вычисленный для loss.
Возвращаемое значение
Операция, обновляющая переменные в var_list. Если global_step не равен None, эта операция также увеличивает global_step.
Исключения
ValueError Если некоторые переменные не являются объектами Variable.

Совместимость с eager mode

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

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