tf.compat.v1.mixed_precision.MixedPrecisionLossScaleOptimizer
Оптимизатор, применяющий масштабирование потерь.
Наследует от: Optimizer
tf.compat.v1.mixed_precision.MixedPrecisionLossScaleOptimizer(
opt, loss_scale
)
Масштабирование потерь — это процесс, в котором значение потерь умножается на множитель, называемый масштабом потерь, а каждый градиент делится на тот же множитель. Псевдокод этого процесса:
loss = ... loss *= loss_scale grads = gradients(loss, vars) grads /= loss_scale
Математически масштабирование потерь не оказывает влияния, но может помочь избежать численного антипереполнения промежуточных градиентов при использовании тензоров float16 для обучения со смешанной точностью. Умножение значения потерь приводит к тому, что к каждому промежуточному градиенту применяется один и тот же множитель.
Масштаб потерь может быть фиксированной константой, выбранной пользователем, или определяться динамически. Динамическое определение масштаба потерь удобно, поскольку его не нужно выбирать явно. Однако это снижает производительность.
Этот оптимизатор оборачивает другой оптимизатор и применяет к нему масштабирование потерь с помощью LossScale. Масштабирование потерь применяется при каждом вычислении градиентов, например с помощью minimize().
| Аргументы | |
|---|---|
use_locking | Логическое значение. Если True, использовать блокировки для предотвращения одновременного обновления переменных. |
name | Непустая строка. Имя, используемое для аккумуляторов, создаваемых оптимизатором. |
| Вызывает исключения | |
|---|---|
ValueError | Если имя имеет недопустимый формат. |
Методы
apply_gradients
apply_gradients(
grads_and_vars, global_step=None, name=None
)
Применяет градиенты к переменным.
Это вторая часть minimize(). Возвращает Operation, который условно применяет градиенты, если все значения градиентов конечны. В противном случае обновление не выполняется (и global_step не увеличивается).
| Аргументы | |
|---|---|
grads_and_vars | Список пар (градиент, переменная), возвращаемый compute_gradients(). |
global_step | Необязательный Variable, значение которого увеличивается на единицу после обновления переменных. |
name | Необязательное имя возвращаемой операции. По умолчанию используется имя, переданное конструктору Optimizer. |
| Возвращает | |
|---|---|
Operation, который условно применяет указанные градиенты. Если global_step не равен None, эта операция также увеличивает global_step. |
| Вызывает исключения | |
|---|---|
RuntimeError | Если вместо этого следует использовать _distributed_apply(). |
compute_gradients
compute_gradients(
loss,
var_list=None,
gate_gradients=optimizer.Optimizer.GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=False,
grad_loss=None
)
Вычисляет градиенты loss для переменных в var_list.
Это изменяет динамический диапазон вычисления градиентов за счёт увеличения значения loss. Затем значения градиентов уменьшаются обратно на величину, обратную масштабу потерь. Это полезно при обучении с пониженной точностью, когда небольшие значения градиентов иначе выходили бы за нижнюю границу представимого диапазона.
| Аргументы | |
|---|---|
loss | Тензор, содержащий значение, которое нужно минимизировать, или вызываемый объект без аргументов, возвращающий это значение. При включённом нетерпеливом выполнении должен быть передан вызываемый объект. |
var_list | Необязательный список или кортеж объектов tf.Variable, которые нужно обновить для минимизации loss. По умолчанию используется список переменных, собранных в графе под ключом GraphKeys.TRAINABLE_VARIABLES. |
gate_gradients | Способ управления вычислением градиентов. Может быть GATE_NONE, GATE_OP или GATE_GRAPH. |
aggregation_method | Задаёт метод объединения составляющих градиента. Допустимые значения определены в классе AggregationMethod. |
colocate_gradients_with_ops | Если True, попытаться разместить градиенты рядом с соответствующей операцией. |
grad_loss | Необязательно. Tensor, содержащий градиент, вычисленный для loss. |
| Возвращает | |
|---|---|
Список пар (градиент, переменная). Переменная присутствует всегда, но градиент может быть None. |
get_name
get_name()
get_slot
get_slot(
var, name
)
Возвращает слот с именем name, созданный для var оптимизатором.
Некоторые подклассы Optimizer используют дополнительные переменные. Например, Momentum и Adagrad используют переменные для накопления обновлений. Этот метод предоставляет доступ к таким объектам Variable, если они вам зачем-либо понадобятся.
Используйте get_slot_names(), чтобы получить список имён слотов, созданных Optimizer.
| Аргументы | |
|---|---|
var | Переменная, переданная в minimize() или apply_gradients(). |
name | Строка. |
| Возвращает | |
|---|---|
Variable для слота, если он был создан; в противном случае — None. |
get_slot_names
get_slot_names()
Возвращает список имён слотов, созданных Optimizer.
См. get_slot().
| Возвращает | |
|---|---|
| Список строк. |
minimize
minimize(
loss,
global_step=None,
var_list=None,
gate_gradients=GATE_OP,
aggregation_method=None,
colocate_gradients_with_ops=False,
name=None,
grad_loss=None
)
Добавляет операции для минимизации loss путём обновления var_list.
Этот метод просто объединяет вызовы compute_gradients() и apply_gradients(). Если нужно обработать градиент до его применения, явно вызовите compute_gradients() и apply_gradients() вместо использования этой функции.
| Аргументы | |
|---|---|
loss | Tensor, содержащее значение, которое нужно минимизировать. |
global_step | Необязательный Variable, значение которого увеличивается на единицу после обновления переменных. |
var_list | Необязательный список или кортеж объектов Variable, которые нужно обновить для минимизации loss. По умолчанию используется список переменных, собранных в графе под ключом GraphKeys.TRAINABLE_VARIABLES. |
gate_gradients | Способ управления вычислением градиентов. Может быть GATE_NONE, GATE_OP или GATE_GRAPH. |
aggregation_method | Задаёт метод объединения составляющих градиента. Допустимые значения определены в классе AggregationMethod. |
colocate_gradients_with_ops | Если True, попытаться разместить градиенты рядом с соответствующей операцией. |
name | Необязательное имя возвращаемой операции. |
grad_loss | Необязательно. Tensor, содержащий градиент, вычисленный для loss. |
| Возвращает | |
|---|---|
Операцию, которая обновляет переменные в var_list. Если global_step не равен None, эта операция также увеличивает global_step. |
| Вызывает исключения | |
|---|---|
ValueError | Если некоторые переменные не являются объектами Variable. |
совместимость с eager execution
При включённом нетерпеливом выполнении loss должна быть функцией Python без аргументов, вычисляющей минимизируемое значение. Минимизация (и вычисление градиентов) выполняется относительно элементов var_list, если он не равен None, либо относительно всех обучаемых переменных, созданных во время выполнения функции loss. Параметры gate_gradients, aggregation_method, colocate_gradients_with_ops и grad_loss игнорируются при включённом нетерпеливом выполнении.
variables
variables()
Возвращает переменные оптимизатора.
| Переменные класса | |
|---|---|
| GATE_GRAPH | 2 |
| GATE_NONE | 0 |
| GATE_OP | 1 |
© 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/MixedPrecisionLossScaleOptimizer