tf.keras.mixed_precision.experimental.LossScaleOptimizer
| Просмотреть исходный код на GitHub |
Устаревший оптимизатор, применяющий масштабирование потери.
Наследуется от: LossScaleOptimizer, Optimizer
tf.keras.mixed_precision.experimental.LossScaleOptimizer(
optimizer, loss_scale
)
Этот класс идентичен классу без экспериментальных функций 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, если Счетчик увеличивается на каждом шаге. После достижения значения |
dynamic_growth_steps | Количество шагов, необходимых для увеличения масштаба потерь. Это None, если На каждые |
initial_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