Spec-Zone.ru › TensorFlow 1.15

tf.keras.mixed_precision.experimental.LossScaleOptimizer

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

Оптимизатор, применяющий масштабирование потерь.

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

Просмотр псевдонимов

Псевдонимы для миграции

См. руководство по миграции для получения дополнительных сведений.

tf.compat.v1.keras.mixed_precision.experimental.LossScaleOptimizer, `tf.compat.v2.keras.mixed_precision.experimental.LossScaleOptimizer`

tf.keras.mixed_precision.experimental.LossScaleOptimizer(
    opt, loss_scale
)

Масштабирование потерь — это процесс умножения потерь на множитель, называемый масштабом потерь, и деления каждого градиента на тот же множитель. Псевдокод для этого процесса:

loss = ...
loss *= loss_scale
grads = gradients(loss, vars)
grads /= loss_scale

Математически масштабирование потерь не оказывает влияния, но может помочь избежать численных потерь точности в промежуточных градиентах при использовании тензоров float16. Умножая потери, к каждому промежуточному градиенту применяется тот же множитель.

Масштаб потерь может быть либо фиксированной константой, выбранной пользователем, либо динамически определяться. Динамическое определение масштаба потерь удобно, поскольку не нужно явно выбирать масштаб потерь. Однако это снижает производительность.

Этот оптимизатор оборачивает другой оптимизатор и применяет к нему масштабирование потерь через LossScale. Масштабирование потерь применяется при вычислении градиентов, либо через minimize() или get_gradients(). Масштаб потерь обновляется через LossScale.update() при применении градиентов, либо через minimize() или apply_gradients(). Например:

opt = tf.keras.optimizers.SGD(0.1)
opt = tf.keras.mixed_precision.experimental.LossScaleOptimizer(opt, "dynamic")
# 'minimize' applies loss scaling to the loss and updates the loss sale.
opt.minimize(loss_fn)

Если для вычисления градиентов используется tf.GradientTape вместо LossScaleOptimizer.minimize или LossScaleOptimizer.get_gradients, потери и градиенты необходимо масштабировать вручную. Это можно сделать, вызвав LossScaleOptimizer.get_scaled_loss перед передачей потерь в tf.GradientTape и LossScaleOptimizer.get_unscaled_gradients после вычисления градиентов с помощью tf.GradientTape. Например:

opt = tf.keras.mixed_precision.experimental.LossScaleOptimizer(...)
vars = ...
with tf.GradientTape() as tape:
  loss = ...
  scaled_loss = opt.get_scaled_loss(loss)
scaled_grads = tape.gradient(scaled_loss, vars)
grads = opt.get_unscaled_gradients(scaled_grads)
opt.apply_gradients(zip(grads, vars))  # Loss scale will be updated here
Аргументы
opt Экземпляр оптимизатора для обертывания.
loss_scale Масштаб потерь для масштабирования потерь и градиентов. Это может быть целое число/вещественное число для использования фиксированного масштаба потерь, строка "dynamic" для использования динамического масштабирования потерь или экземпляр LossScale. Строка "dynamic" эквивалентна передаче DynamicLossScale(), а передача целого числа/вещественного числа эквивалентна передаче FixedLossScale с заданным масштабом потерь.
Атрибуты
iterations Переменная. Количество шагов обучения, выполненных этим оптимизатором.
learning_rate
loss_scale Экземпляр LossScale , связанный с этим оптимизатором.
lr
weights Возвращает переменные этого оптимизатора в порядке их создания.

Методы

add_slot

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

add_slot(
    var, slot_name, initializer='zeros'
)

Добавить новую переменную слота для var.

add_weight

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

add_weight(
    name, shape, dtype=None, initializer='zeros', trainable=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.VariableAggregation.NONE
)

apply_gradients

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

apply_gradients(
    grads_and_vars, name=None
)

Применить градиенты к переменным.

Это вторая часть minimize(). Она возвращает Operation, который применяет градиенты.

Аргументы
grads_and_vars Список пар (градиент, переменная).
name Необязательное имя для возвращаемой операции. По умолчанию имя, переданное конструктору Optimizer.
Возвращает
Operation, который применяет указанные градиенты. Значение iterations автоматически увеличится на 1.
Исключения
TypeError Если grads_and_vars имеет неправильный формат.
ValueError Если ни у одной из переменных нет градиентов.

from_config

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

@classmethod
from_config(
    config, custom_objects=None
)

Создает оптимизатор из его конфигурации.

Этот метод является обратным к get_config, способный создать тот же оптимизатор из словаря конфигурации.

Аргументы
config Словарь Python, обычно результат get_config.
custom_objects Словарь Python, сопоставляющий имена дополнительным объектам Python, используемым для создания этого оптимизатора, таким как функция, используемая для гиперпараметра.
Возвращает
Экземпляр оптимизатора.

get_config

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

get_config()

Возвращает конфигурацию оптимизатора.

Конфигурация оптимизатора — это словарь Python (сериализуемый) содержащий конфигурацию оптимизатора. Тот же оптимизатор может быть позже пересоздан (без сохранения состояния) из этой конфигурации.

Возвращает
Словарь Python.

get_gradients

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

get_gradients(
    loss, params
)

Возвращает градиенты loss по отношению к params.

Аргументы
loss Тензор потерь.
params Список переменных.
Возвращает
Список тензоров градиентов.
Исключения
ValueError В случае, если какой-либо градиент не может быть вычислен (например, если функция градиента не реализована).

get_scaled_loss

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

get_scaled_loss(
    loss
)

Масштабирует потери на масштаб потерь.

Этот метод необходим только в том случае, если вы вычисляете градиенты вручную, например, с помощью tf.GradientTape. В этом случае вызовите этот метод для масштабирования потерь перед передачей потерь в tf.GradientTape. Если вы используете LossScaleOptimizer.minimize или LossScaleOptimizer.get_gradients, масштабирование потерь применяется автоматически, и этот метод не нужен.

Если этот метод вызывается, следует также вызвать get_unscaled_gradients. См. документацию tf.keras.mixed_precision.experimental.LossScaleOptimizer для примера.

Аргументы
loss Потери, которые будут умножены на масштаб потерь. Может быть либо тензором, либо вызываемой функцией, возвращающей тензор.
Возвращает
loss умноженный на LossScaleOptimizer.loss_scale().

get_slot

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

get_slot(
    var, slot_name
)

get_slot_names

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

get_slot_names()

Список имен слотов этого оптимизатора.

get_unscaled_gradients

Просмотр исходного кода

get_unscaled_gradients(
    grads
)

Рассчитывает градиенты, деля их на масштаб потерь.

Этот метод нужен только если вы вычисляете градиенты вручную, например, с помощью tf.GradientTape. В этом случае, вызовите этот метод для деления градиентов на масштаб потерь после их вычисления с помощью tf.GradientTape. Если вы используете LossScaleOptimizer.minimize или LossScaleOptimizer.get_gradients, масштабирование потерь применяется автоматически, и этот метод не нужен.

Если этот метод вызван, get_scaled_loss также должен быть вызван. Смотрите tf.keras.mixed_precision.experimental.LossScaleOptimizer документацию для примера.

Аргументы
grads Список тензоров, каждый из которых будет разделен на масштаб потерь. Может содержать значения None, которые игнорируются.
Возвращает
Новый список той же длины, что и grads, где каждое ненулевое значение в grads делится на LossScaleOptimizer.loss_scale().

get_updates

Просмотр исходного кода

get_updates(
    loss, params
)

get_weights

Просмотр исходного кода

get_weights()

minimize

Просмотр исходного кода

minimize(
    loss, var_list, grad_loss=None, name=None
)

Минимизирует loss, обновляя var_list.

Этот метод просто вычисляет градиент с помощью tf.GradientTape и вызывает apply_gradients(). Если вы хотите обработать градиент перед применением, то вызовите tf.GradientTape и apply_gradients() явно вместо использования этой функции.

Аргументы
loss Функция без аргументов, возвращающая значение для минимизации.
var_list Список или кортеж объектов Variable, которые нужно обновить для минимизации loss, или функция, возвращающая список или кортеж объектов Variable. Используйте функцию, когда список переменных был бы неполным до minimize, так как переменные создаются в первый раз, когда вызывается loss.
grad_loss Необязательно. Объект Tensor, содержащий градиент, вычисленный для loss.
name Необязательное имя для возвращаемой операции.
Возвращает
Операция, которая обновляет переменные в var_list. Если global_step не None, эта операция также увеличивает global_step.
Возможные исключения
ValueError Если некоторые переменные не являются объектами Variable.

set_weights

Просмотр исходного кода

set_weights(
    weights
)

variables

Просмотр исходного кода

variables()

Возвращает переменные этого оптимизатора в порядке их создания.

© 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/keras/mixed_precision/experimental/LossScaleOptimizer

Spec-Zone.ru

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