tf.mixed_precision.experimental.LossScale
Базовый класс для всех масштабируемых функций потерь.
tf.mixed_precision.experimental.LossScale()
Это абстрактный базовый класс, поэтому вы не можете создать его напрямую. Вместо этого используйте один из его конкретных подклассов:
-
tf.mixed_precision.experimental.DynamicLossScale(рекомендуется) tf.mixed_precision.experimental.FixedLossScale
Рекомендуется использовать масштабирование потерь с tf.keras.mixed_precision.experimental.LossScaleOptimizer, так как это проще, чем использовать масштабирование потерь напрямую.
Масштабирование потерь — это процесс, при котором функция потерь умножается на множитель, называемый масштабом потерь, а каждый градиент делится на тот же множитель. Псевдокод для этого процесса:
loss = ... loss *= loss_scale grads = gradients(loss, vars) grads /= loss_scale
Математически масштабирование потерь не влияет, но может помочь избежать численных потерь в промежуточных градиентах при использовании тензоров float16 для обучения с смешанной точностью. Умножая функцию потерь, к каждому промежуточному градиенту применяется тот же множитель.
Экземпляры этого класса представляют масштаб потерь. Вызов экземпляров этого класса возвращает функцию потерь как скалярный тензор float32, в то время как метод update() обновляет масштаб потерь в зависимости от значений градиентов. Оптимизаторы используют экземпляры этого класса для масштабирования функции потерь и градиентов.
В большинстве функций, которые принимают LossScale, вы также можете передать целое число (например,
8) для создания FixedLossScale или строку "dynamic" для создания динамического масштаба потерь.
Методы
from_config
@classmethod
from_config(
config
)
Создает LossScale из его конфигурации.
get_config
@abc.abstractmethod get_config()
Возвращает конфигурацию этого масштаба потерь.
update
@abc.abstractmethod
update(
grads
)
Обновляет значение масштаба потерь.
Масштаб потерь потенциально будет обновлен на основе значения grads. Возвращаемый тензор при вызове этого класса обновляется только при оценке этой функции.
В режиме eager это напрямую обновляет масштаб потерь, поэтому вызов __call__ вернёт обновлённый масштаб потерь. В режиме графа это возвращает операцию, которая при оценке обновляет масштаб потерь.
Эта функция также возвращает should_apply_gradients логическое значение. Если False, градиенты не должны применяться к переменным, которые выполняются, так как были обнаружены бесконечные градиенты, а масштаб потерь был обновлён для уменьшения вероятности нахождения бесконечных градиентов на следующем шаге. Некоторые классы масштабирования потерь всегда возвращают True, так как не могут настраивать себя в ответ на бесконечные градиенты.
При использовании DistributionStrategy эта функция может вызываться только в контексте кросс-реплики.
| Аргументы | |
|---|---|
grads | Вложенная структура нескомпенсированных градиентов, каждый из которых является градиентом функции потерь по отношению к весу. Градиенты должны быть уже разделены на масштаб потерь перед передачей в эту функцию. Принимаются градиенты 'None', и они игнорируются. |
| Возвращаемые значения | |
|---|---|
update_op | В режиме eager — None. В режиме графа — операция для обновления масштаба потерь. |
should_apply_gradients | Либо логическое значение, либо скалярный логический тензор. Если False, вызывающий должен пропустить применение grads к переменным на этом шаге. |
__call__
@abc.abstractmethod __call__()
Возвращает текущий масштаб потерь как скалярный float32 тензор.
© 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.3/api_docs/python/tf/mixed_precision/experimental/LossScale