Spec-Zone.ru › TensorFlow 2.4

tf.keras.mixed_precision.experimental.LossScaleOptimizer

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

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

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

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

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

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

tf.compat.v1.keras.mixed_precision.experimental.LossScaleOptimizer

tf.keras.mixed_precision.experimental.LossScaleOptimizer(
    optimizer, loss_scale
)
Предупреждение: Этот класс устарел и будет удален в TensorFlow 2.5. Используйте вместо него класс без экспериментальных функций tf.keras.mixed_precision.LossScaleOptimizer.

Этот класс идентичен классу без экспериментальных функций keras.mixed_precision.LossScaleOptimizer, за исключением того, что его конструктор принимает другие аргументы. В этом классе (экспериментальной версии) конструктор принимает аргумент loss_scale. В классе без экспериментальных функций информация о масштабировании потери кодируется в нескольких аргументах. Обратите внимание, что в отличие от этого класса, класс без экспериментальных функций не принимает tf.compat.v1.mixed_precision.LossScale, который устарел.

Если вы сейчас используете этот класс, следует переключиться на класс без экспериментальных функций tf.keras.mixed_precision.LossScaleOptimizer вместо него. Мы приводим несколько примеров преобразования использования экспериментального класса в эквивалентный класс без экспериментальных функций.

# In all of the the examples below, `opt1` and `opt2` are identical
opt1 = tf.keras.mixed_precision.experimental.LossScaleOptimizer(
    tf.keras.optimizers.SGD(), loss_scale='dynamic')
opt2 = tf.keras.mixed_precision.LossScaleOptimizer(
    tf.keras.optimizers.SGD())
assert opt1.get_config() == opt2.get_config()
opt1 = tf.keras.mixed_precision.experimental.LossScaleOptimizer(
    tf.keras.optimizers.SGD(), loss_scale=123)
# dynamic=False indicates to use fixed loss scaling. initial_scale=123
# refers to the initial loss scale, which is the single fixed loss scale
# when dynamic=False.
opt2 = tf.keras.mixed_precision.LossScaleOptimizer(
    tf.keras.optimizers.SGD(), dynamic=False, initial_scale=123)
assert opt1.get_config() == opt2.get_config()
loss_scale = tf.compat.v1.mixed_precision.experimental.DynamicLossScale(
    initial_loss_scale=2048, increment_period=500)
opt1 = tf.keras.mixed_precision.experimental.LossScaleOptimizer(
    tf.keras.optimizers.SGD(), loss_scale=loss_scale)
opt2 = tf.keras.mixed_precision.LossScaleOptimizer(
    tf.keras.optimizers.SGD(), initial_scale=2048,
    dynamic_growth_steps=500)
assert opt1.get_config() == opt2.get_config()

Не забудьте также переключиться с этого класса на класс без экспериментальных функций при проверке `isinstance`, если такие проверки у вас есть. В противном случае ваша модель может столкнуться с трудноотлаживаемыми проблемами, так как экспериментальный LossScaleOptimizer является подклассом неэкспериментального LossScaleOptimizer, но не наоборот. Безопасно переключиться на проверки `isinstance` для неэкспериментального LossScaleOptimizer даже до использования неэкспериментального LossScaleOptimizer.

opt1 = tf.keras.mixed_precision.experimental.LossScaleOptimizer(
    tf.keras.optimizers.SGD(), loss_scale='dynamic')
# The experimental class subclasses the non-experimental class
isinstance(opt1, tf.keras.mixed_precision.LossScaleOptimizer)
True
opt2 = tf.keras.mixed_precision.LossScaleOptimizer(
    tf.keras.optimizers.SGD())
# The non-experimental class does NOT subclass the experimental class.
isinstance(opt2, tf.keras.mixed_precision.experimental.LossScaleOptimizer)
False
Аргументы
optimizer Экземпляр оптимизатора, который необходимо обернуть.
loss_scale Масштаб потерь для масштабирования потерь и градиентов. Может быть целым/вещественным числом для использования фиксированного масштаба потерь, строкой "dynamic" для использования динамического масштабирования потерь или экземпляром LossScale. Строка "dynamic" эквивалентна передаче DynamicLossScale(), а передача целого/вещественного числа эквивалентна передаче FixedLossScale с заданным масштабом потерь. Если передается DynamicLossScale, DynamicLossScale.multiplier должен быть равен 2 (по умолчанию).
Исключения
ValueError в случае любых недопустимых аргументов.
Атрибуты
dynamic Булево значение, указывающее, используется ли динамическое масштабирование потерь.
dynamic_counter Количество шагов с момента последнего увеличения или уменьшения масштаба потерь.

Это None, если LossScaleOptimizer.dynamic равно False.

Счетчик увеличивается на каждом шаге. После достижения значения LossScaleOptimizer.dynamic_growth_steps масштаб потерь удваивается, а счетчик сбрасывается в ноль. Если встречаются бесконечные градиенты, масштаб потерь уменьшается вдвое, а счетчик сбрасывается в ноль.

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

Это None, если LossScaleOptimizer.dynamic равно False.

На каждые dynamic_growth_steps последовательных шагов с конечными градиентами масштаб потерь увеличивается.

initial_scale Начальный масштаб потерь.

Если LossScaleOptimizer.dynamic равно False, это то же число, что и LossScaleOptimizer.loss_scale, так как масштаб потерь никогда не меняется.

inner_optimizer Оптимизатор, который обернут этим LossScaleOptimizer.
loss_scale Текущий масштаб потерь в виде скалярного тензора типа float32.

Методы

get_scaled_loss

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

get_scaled_loss(
    loss
)

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

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

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

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

get_unscaled_gradients

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

get_unscaled_gradients(
    grads
)

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

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

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

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

© 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/r2.4/api_docs/python/tf/keras/mixed_precision/experimental/LossScaleOptimizer

Spec-Zone.ru

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