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
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]))
Описание
Используется в блокнотах
| Используется в руководстве | Используется в учебных материалах |
|---|---|
| Ссылки | |
|---|---|
| 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
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