tf.compat.v1.train.AdagradOptimizer
Оптимизатор, реализующий алгоритм Adagrad.
Наследуется от: Optimizer
tf.compat.v1.train.AdagradOptimizer(
learning_rate,
initial_accumulator_value=0.1,
use_locking=False,
name='Adagrad'
)
Миграция на TF2
tf.compat.v1.train.AdagradOptimizer совместим с режимом eager и tf.function. Когда включено выполнение eager, learning_rate, initial_accumulator_value, и epsilon могут быть вызываемыми объектами, принимающими на вход пустой список аргументов и возвращающими фактическое значение для использования. Это может быть полезно для изменения этих значений при различных вызовах функций оптимизатора.
Для перехода на родной стиль TF2 используйте tf.keras.optimizers.Adagrad вместо этого. Обратите внимание, что из-за различий в реализации tf.keras.optimizers.Adagrad и tf.compat.v1.train.AdagradOptimizer могут быть незначительные различия в вычислениях с плавающей точкой, даже если формула, используемая для обновления переменных, остается неизменной.
Структурное соответствие с родным TF2
До:
optimizer = tf.compat.v1.train.AdagradOptimizer( learning_rate=learning_rate, initial_accumulator_value=initial_accumulator_value)
После:
optimizer = tf.keras.optimizers.Adagrad( learning_rate=learning_rate, initial_accumulator_value=initial_accumulator_value, epsilon=1e-07)
Как сопоставить аргументы
| Имя аргумента TF1 | Имя аргумента TF2 | Примечание |
|---|---|---|
learning_rate |
learning_rate | Будьте осторожны при установлении значения тензора learning_rate, вычисляемого из глобального шага. В TF1 это обычно подразумевало динамическую скорость обучения и пересчет на каждом шаге. В TF2 (eager + функция) это будет обрабатываться как скалярное значение, которое вычисляется только один раз вместо символического места, которое вычисляется каждый раз. |
initial_accumulator_value |
initial_accumulator_value | Аргумент может принимать значение ноль в TF2, что не допускается в TF1.| |
| - |
epsilon |
epsilon стала настраиваемой в TF2. Значение по умолчанию изменено с 1e-8 на 1e-7 |
use_locking | - | Не применимо в TF2. |
Пример использования до и после
До:
x = tf.Variable([1,2,3], dtype=tf.float32) grad = tf.constant([0.1, 0.2, 0.3]) optimizer = tf.compat.v1.train.AdagradOptimizer(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.Adagrad(learning_rate=0.001) optimizer.apply_gradients(zip([grad], [x]))
Описание
Ссылки:
Adaptive Subgradient Methods for Online Learning and Stochastic Optimization :Duchi et al., 2011 (pdf)
| Аргументы | |
|---|---|
learning_rate | Значение Tensor или число с плавающей точкой. Скорость обучения. |
initial_accumulator_value | Число с плавающей точкой. Начальное значение для аккумуляторов, должно быть положительным. |
use_locking | Если True использовать блокировки для операций обновления. |
name | Необязательный префикс имени для операций, создаваемых при применении градиентов. По умолчанию "Adagrad". |
| Возможные ошибки | |
|---|---|
ValueError | Если initial_accumulator_value является недопустимым. |
Методы
apply_gradients
apply_gradients(
grads_and_vars, global_step=None, name=None
)
Применение градиентов к переменным.
Это вторая часть 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. |
| Возвращаемое значение | |
|---|---|
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 он должен быть вызываемым объектом. 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.
Возвращаемое значение: Список пар (градиент, переменная). Переменная всегда присутствует, но градиент может быть 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 | 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 |
совместимость с ускорением вычислений
При включенном режиме ускоренного выполнения loss должна быть функцией Python, которая не принимает аргументов и вычисляет значение, которое нужно минимизировать. Минимизация (и вычисление градиента) выполняется относительно элементов var_list если оно не равно None, иначе относительно любых обучаемых переменных, созданных во время выполнения функции loss 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/versions/r2.9/api_docs/python/tf/compat/v1/train/AdagradOptimizer