tf.compat.v1.train.experimental.MixedPrecisionLossScaleOptimizer
Оптимизатор, применяющий масштабирование потерь.
Наследуется от: Optimizer
tf.compat.v1.train.experimental.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 | Тензор, содержащий значение для минимизации, или вызываемая функция без аргументов, которая возвращает значение для минимизации. При включённом исполнении в режиме eager это должна быть вызываемая функция. |
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
Когда выполняется eager-вычисление, loss должна быть функцией Python, которая не принимает аргументы и вычисляет значение для минимизации. Минимизация (и вычисление градиента) выполняется относительно элементов var_list , если оно не равно None, иначе относительно всех обучаемых переменных, созданных во время выполнения функции loss . gate_gradients, aggregation_method, colocate_gradients_with_ops и grad_loss игнорируются, когда включено eager-вычисление.
variables
variables()
Возвращает переменные оптимизатора.
Переменные класса
-
GATE_GRAPH = 2 -
GATE_NONE = 0 -
GATE_OP = 1
© 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/compat/v1/train/experimental/MixedPrecisionLossScaleOptimizer