Spec-Zone.ru › TensorFlow 2.9

tf.compat.v1.train.FtrlOptimizer

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

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

tf.compat.v1.train.FtrlOptimizer(
    learning_rate,
    learning_rate_power=-0.5,
    initial_accumulator_value=0.1,
    l1_regularization_strength=0.0,
    l2_regularization_strength=0.0,
    use_locking=False,
    name='Ftrl',
    accum_name=None,
    linear_name=None,
    l2_shrinkage_regularization_strength=0.0,
    beta=None
)

Эта версия поддерживает как онлайн L2 (McMahan и др., 2013), так и L2-сжатие, которое добавляет штраф L2 к функции потерь.

Ссылки:

Прогнозирование кликов по объявлениям: McMahan et al., 2013 (pdf)

Аргументы
learning_rate Значение с плавающей точкой или постоянное значение с плавающей точкой Tensor.
learning_rate_power Значение с плавающей точкой, должно быть меньше или равно нулю. Управляет тем, как скорость обучения уменьшается во время обучения. Используйте ноль для фиксированной скорости обучения. См. раздел 3.1 в (McMahan et al., 2013).
initial_accumulator_value Начальное значение для аккумуляторов. Допускаются только нулевые или положительные значения.
l1_regularization_strength Значение с плавающей точкой, должно быть больше или равно нулю.
l2_regularization_strength Значение с плавающей точкой, должно быть больше или равно нулю.
use_locking Если True использовать блокировки для операций обновления.
name Необязательный префикс имени для операций, созданных при применении градиентов. По умолчанию "Ftrl".
accum_name Суффикс для переменной, хранящей накопитель квадрата градиента. Если не указано, по умолчанию имя.
linear_name Суффикс для переменной, хранящей накопитель линейного градиента. Если не указано, по умолчанию имя + "1".
l2_shrinkage_regularization_strength Значение с плавающей точкой, должно быть больше или равно нулю. Это отличается от вышеуказанного L2 тем, что вышеуказанный L2 является стабилизирующим штрафом, а это L2-сжатие является штрафом за величину. Формулировка FTRL может быть записана как: w{t+1} = argminw(\hat{g}{1:t}w + L1||w||_1 + L2||w||_2^2), где \hat{g} = g + (2L2_shrinkagew), а g является градиентом функции потерь по отношению к весам w. В частности, в отсутствие регуляризации L1 она эквивалентна следующему правилу обновления: w_{t+1} = w_t - lr_t / (beta + 2L2lr_t) * g_t - 2L2_shrinkagelr_t / (beta + 2L2lr_t) * w_t, где lr_t - скорость обучения в момент t. При входных данных разреженной матрицы сжатие произойдет только для активных весов.
beta Значение с плавающей точкой; соответствует параметру beta в статье.
Исключения
ValueError Если один из аргументов некорректен.

Методы

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

Внимание: Этот API был разработан для TensorFlow v1. Продолжайте чтение, чтобы узнать, как перейти от этого API к эквиваленту в TensorFlow v2. См. руководство по миграции TensorFlow v1 в TensorFlow v2 https://www.tensorflow.org/guide/migrate, чтобы узнать, как мигрировать остальную часть вашего кода.

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 содержащий градиент, вычисленный для 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/versions/r2.9/api_docs/python/tf/compat/v1/train/FtrlOptimizer

Spec-Zone.ru

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