Spec-Zone.ru › TensorFlow 1.15

tf.contrib.opt.DecoupledWeightDecayExtension

Этот класс позволяет расширять оптимизаторы с развязанным разложением по весу.

tf.contrib.opt.DecoupledWeightDecayExtension(
    weight_decay, **kwargs
)

Он реализует развязанное разложение по весу, описанное Loshchilov & Hutter (https://arxiv.org/pdf/1711.05101.pdf), в котором разложение по весу развязано от шагов оптимизации по отношению к функции потерь. Для вариантов SGD это упрощает поиск гиперпараметров, поскольку развязывает настройки разложения по весу и скорости обучения. Для алгоритмов адаптивного градиента он регуляризует переменные с большими градиентами сильнее, чем L2-регуляризация, что, как показано в вышеупомянутой статье, приводит к лучшим потерям обучения и обобщающей ошибке.

Этот класс сам по себе не является оптимизатором, а скорее расширяет существующие оптимизаторы с развязанным разложением по весу. Мы явно определяем два примера, использованные в вышеупомянутой статье (SGDW и AdamW), но в общем случае это может расширить любой OptimizerX, используя extend_with_weight_decay(OptimizerX, weight_decay=weight_decay). Для его работы он должен быть первым классом, от которого унаследован Optimizer с разложением по весу, например:

class AdamWOptimizer(DecoupledWeightDecayExtension, adam.AdamOptimizer):
  def __init__(self, weight_decay, *args, **kwargs):
    super(AdamWOptimizer, self).__init__(weight_decay, *args, **kwargs).

Обратите внимание, что это расширение разлагает веса ДО применения обновления на основе градиента, т.е. это расширение имеет желаемое поведение только для оптимизаторов, которые не зависят от значения «var» в шаге обновления!

Примечание: при применении разложения к скорости обучения, убедитесь, что вы также вручную применили разложение к weight_decay. Например:
schedule =
tf.compat.v1.train.piecewise_constant(tf.compat.v1.train.get_global_step(),
                                       [10000, 15000], [1e-0, 1e-1, 1e-2])
lr = 1e-1 * schedule()
wd = lambda: 1e-4 * schedule()

# ...

optimizer = tf.contrib.opt.MomentumWOptimizer(learning_rate=lr,
                                              weight_decay=wd,
                                              momentum=0.9,
                                              use_nesterov=True)
Аргументы
weight_decay Значение типа Tensor или число с плавающей точкой, коэффициент, на который переменная разлагается на шаге обновления.
**kwargs Необязательный список или кортеж или множество объектов Variable для разложения.

Методы

apply_gradients

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

apply_gradients(
    grads_and_vars, global_step=None, name=None, decay_var_list=None
)

Применяет градиенты к переменным и разлагает переменные.

Эта функция аналогична Optimizer.apply_gradients, за исключением того, что она позволяет указать переменные, которые должны быть разложены с помощью decay_var_list. Если decay_var_list равно None, все переменные в var_list разлагаются.

Для получения дополнительной информации см. документацию к Optimizer.apply_gradients.

Аргументы
grads_and_vars Список пар (градиент, переменная), возвращаемых compute_gradients().
global_step Необязательный Variable для увеличения на единицу после обновления переменных.
name Необязательное имя возвращаемой операции. По умолчанию совпадает с именем, переданным конструктору Optimizer.
decay_var_list Необязательный список переменных разложения.
Возвращаемое значение
Операция, применяющая указанные градиенты. Если global_step не равно None, эта операция также увеличивает global_step.

minimize

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

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

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

Эта функция аналогична Optimizer.minimize, за исключением того, что она позволяет указать переменные, которые должны быть разложены с помощью decay_var_list. Если decay_var_list равно None, все переменные в var_list разлагаются.

Для получения дополнительной информации см. документацию к Optimizer.minimize.

Аргументы
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.
decay_var_list Необязательный список переменных разложения.
Возвращаемое значение
Операция, обновляющая переменные в var_list. Если global_step не было None, эта операция также увеличивает global_step.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/opt/DecoupledWeightDecayExtension

Spec-Zone.ru

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