tf.compat.v1.mixed_precision.LossScale
Базовый класс для всех шкал потерь TF1.
tf.compat.v1.mixed_precision.LossScale()
Это абстрактный базовый класс, поэтому создать его экземпляр напрямую нельзя. Вместо этого используйте один из его конкретных подклассов:
Масштабирование потерь — это процесс, при котором потери умножаются на множитель, называемый масштабом потерь, а каждый градиент делится на тот же множитель. Псевдокод этого процесса:
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 типа bool. Если значение равно False, градиенты не следует применять к переменным на этом шаге, поскольку были обнаружены не конечные градиенты, а масштаб потерь был обновлен, чтобы снизить вероятность обнаружения не конечных градиентов на следующем шаге. Некоторые классы масштабирования потерь всегда возвращают True, поскольку не могут адаптироваться к не конечным градиентам.
При использовании DistributionStrategy эту функцию можно вызывать только в контексте между репликами.
| Аргументы | |
|---|---|
grads | Вложенная структура немасштабированных градиентов, каждый из которых является градиентом потерь по отношению к весу. Перед передачей этой функции градиенты уже должны быть поделены на масштаб потерь. Градиенты со значением 'None' допускаются и игнорируются. |
| Возвращает | |
|---|---|
update_op | В eager-режиме — None. В режиме графа — операция для обновления масштаба потерь. |
should_apply_gradients | Логическое значение или скалярный логический тензор. Если значение равно False, вызывающая сторона должна пропустить применение grads к переменным на этом шаге. |
__call__
@abc.abstractmethod __call__()
Возвращает текущий масштаб потерь в виде скалярного тензора float32.
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/api_docs/python/tf/compat/v1/mixed_precision/LossScale