Spec-Zone.ru › TensorFlow 2.3

tf.keras.mixed_precision.experimental.LossScaleOptimizer

Просмотреть исходный код на GitHub

Оптимизатор, применяющий масштабирование потерь.

Наследуется от: Optimizer

Просмотр псевдонимов

Псевдонимы для миграции

См. Руководство по миграции для получения дополнительных сведений.

tf.compat.v1.keras.mixed_precision.experimental.LossScaleOptimizer

tf.keras.mixed_precision.experimental.LossScaleOptimizer(
    optimizer, loss_scale
)

Масштабирование потерь — это процесс умножения потерь на множитель, называемый масштабом потерь, и деления каждого градиента на тот же множитель. Псевдокод для этого процесса:

loss = ...
loss *= loss_scale
grads = gradients(loss, vars)
grads /= loss_scale

Математически, масштабирование потерь не оказывает влияния, но может помочь избежать численных потерь точности в промежуточных градиентах при использовании тензоров с плавающей запятой float16. Умножая потери, каждый промежуточный градиент будет иметь примененный тот же множитель.

Масштаб потерь может быть либо фиксированной константой, выбранной пользователем, либо динамически определяться. Динамическое определение масштаба потерь удобно, поскольку масштаб потерь не нужно явно выбирать. Однако это снижает производительность.

Этот оптимизатор оборачивает другой оптимизатор и применяет масштабирование потерь к нему с помощью LossScale. Масштабирование потерь применяется всякий раз, когда вычисляются градиенты, либо с помощью minimize() или get_gradients(). Масштаб потерь обновляется через LossScale.update() всякий раз, когда применяются градиенты, либо через minimize() или apply_gradients(). Например:

opt = tf.keras.optimizers.SGD(0.25)
opt = tf.keras.mixed_precision.experimental.LossScaleOptimizer(opt,
                                                               "dynamic")
var = tf.Variable(1.)
loss_fn = lambda: var ** 2
# 'minimize' applies loss scaling to the loss and updates the loss sale.
opt.minimize(loss_fn, var_list=var)
var.numpy()
0.5

Если для вычисления градиентов используется tf.GradientTape вместо LossScaleOptimizer.minimize или LossScaleOptimizer.get_gradients, потери и градиенты должны быть масштабированы вручную. Это можно сделать, вызвав LossScaleOptimizer.get_scaled_loss перед передачей потерь в tf.GradientTape и LossScaleOptimizer.get_unscaled_gradients после вычисления градиентов с помощью tf.GradientTape. Например:

with tf.GradientTape() as tape:
  loss = loss_fn()
  scaled_loss = opt.get_scaled_loss(loss)
scaled_grad = tape.gradient(scaled_loss, var)
(grad,) = opt.get_unscaled_gradients([scaled_grad])
opt.apply_gradients([(grad, var)])  # Loss scale is updated here
var.numpy()
0.25
Аргументы
optimizer Экземпляр Optimizer для обертывания.
loss_scale Масштаб потерь для масштабирования потерь и градиентов. Может быть целым/вещественным числом для использования фиксированного масштаба потерь, строкой "dynamic" для использования динамического масштабирования потерь или экземпляром LossScale. Строка "dynamic" эквивалентна передаче DynamicLossScale(), а передача целого/вещественного числа эквивалентна передаче FixedLossScale с заданным масштабом потерь.
Атрибуты
iterations Переменная. Количество шагов обучения, которые выполнил этот оптимизатор.
learning_rate
loss_scale Экземпляр LossScale , связанный с этим оптимизатором.
lr
weights Возвращает переменные этого оптимизатора в порядке их создания.

Методы

add_slot

Просмотреть исходный код

add_slot(
    var, slot_name, initializer='zeros'
)

Добавление новой переменной слота для var.

add_weight

Просмотреть исходный код

add_weight(
    name, shape, dtype=None, initializer='zeros', trainable=None,
    synchronization=tf.VariableSynchronization.AUTO,
    aggregation=tf.compat.v1.VariableAggregation.NONE
)

apply_gradients

Просмотреть исходный код

apply_gradients(
    grads_and_vars, name=None, experimental_aggregate_gradients=True
)

Применение градиентов к переменным.

Это вторая часть minimize(). Она возвращает Operation, который применяет градиенты.

Метод суммирует градиенты со всех реплик при наличии tf.distribute.Strategy по умолчанию. Вы можете самостоятельно агрегировать градиенты, передав experimental_aggregate_gradients=False.

Пример:

grads = tape.gradient(loss, vars)
grads = tf.distribute.get_replica_context().all_reduce('sum', grads)
# Processing aggregated gradients.
optimizer.apply_gradients(zip(grads, vars),
    experimental_aggregate_gradients=False)

Аргументы
grads_and_vars Список пар (градиент, переменная).
name Необязательное имя для возвращаемой операции. По умолчанию используется имя, переданное в конструктор Optimizer.
experimental_aggregate_gradients Нужно ли суммировать градиенты от разных реплик при наличии tf.distribute.Strategy. Если False, пользователь отвечает за агрегацию градиентов. По умолчанию True.
Возвращаемое значение
Operation, который применяет указанные градиенты. iterations будет автоматически увеличен на 1.
Исключения
TypeError Если grads_and_vars имеет неправильный формат.
ValueError Если ни у одной из переменных нет градиентов.

from_config

Просмотреть исходный код

@classmethod
from_config(
    config, custom_objects=None
)

Создает оптимизатор из его конфигурации.

Этот метод является обратным к get_config, способный создать тот же оптимизатор из словаря конфигурации.

Аргументы
config Словарь Python, обычно результат get_config.
custom_objects Словарь Python, сопоставляющий имена дополнительным объектам Python, используемым для создания этого оптимизатора, например, функции, используемой для гиперпараметра.
Возвращаемое значение
Экземпляр оптимизатора.

get_config

Просмотреть исходный код

get_config()

Возвращает конфигурацию оптимизатора.

Конфигурация оптимизатора — это словарь Python (сериализуемый), содержащий конфигурацию оптимизатора. Тот же оптимизатор можно повторно создать позже (без сохраненного состояния) из этой конфигурации.

Возвращаемое значение
Словарь Python.

get_gradients

Просмотреть исходный код

get_gradients(
    loss, params
)

Возвращает градиенты loss по отношению к params.

Аргументы
loss Тензор потерь.
params Список переменных.
Возвращаемое значение
Список тензоров градиента.
Исключения
ValueError В случае, если какой-либо градиент не может быть вычислен (например, если функция градиента не реализована).

get_scaled_loss

Просмотреть исходный код

get_scaled_loss(
    loss
)

Масштабирует потери на масштаб потерь.

Этот метод необходим только если вы вычисляете градиенты вручную, например, с помощью tf.GradientTape. В этом случае вызовите этот метод, чтобы масштабировать потери перед передачей их в tf.GradientTape. Если вы используете LossScaleOptimizer.minimize или LossScaleOptimizer.get_gradients, масштабирование потерь применяется автоматически, и этот метод не нужен.

Если этот метод вызван, get_unscaled_gradients также должен быть вызван. См. tf.keras.mixed_precision.experimental.LossScaleOptimizer документацию для примера.

Аргументы
loss Потери, которые будут умножены на масштаб потерь. Может быть либо тензором, либо вызываемой функцией, возвращающей тензор.
Возвращаемое значение
loss, умноженный на LossScaleOptimizer.loss_scale().

get_slot

Просмотреть исходный код

get_slot(
    var, slot_name
)

get_slot_names

Просмотреть исходный код

get_slot_names()

Список имён слотов данного оптимизатора.

get_unscaled_gradients

Просмотреть исходный код

get_unscaled_gradients(
    grads
)

Дескалирует градиенты на величину масштаба потерь.

Этот метод необходим только если вы вычисляете градиенты вручную, например, с помощью tf.GradientTape. В этом случае, вызовите этот метод для дескалирования градиентов после их вычисления с помощью tf.GradientTape. Если вы используете LossScaleOptimizer.minimize или LossScaleOptimizer.get_gradients, масштабирование потерь применяется автоматически, и этот метод не нужен.

Если этот метод вызывается, get_scaled_loss также должен быть вызван. См. документацию tf.keras.mixed_precision.experimental.LossScaleOptimizer для примера.

Аргументы
grads Список тензоров, каждый из которых будет разделен на масштаб потерь. Может содержать значения None, которые игнорируются.
Возвращает
Новый список той же длины, что и grads, где каждое ненулевое значение в grads делится на LossScaleOptimizer.loss_scale().

get_updates

Просмотреть исходный код

get_updates(
    loss, params
)

get_weights

Просмотреть исходный код

get_weights()

Возвращает текущие веса оптимизатора.

Веса оптимизатора — это его состояние (т.е. переменные). Эта функция возвращает значения весов, связанные с этим оптимизатором, в виде списка массивов NumPy. Первое значение всегда — счётчик итераций оптимизатора, а за ним — переменные состояния оптимизатора в порядке их создания. Возвращённый список можно использовать для загрузки состояния в аналогичные оптимизаторы.

Например, оптимизатор RMSprop для этой простой модели возвращает список из трёх значений — счётчик итераций, а затем среднеквадратичное значение для ядра и смещения единственного слоя Dense:

opt = tf.keras.optimizers.RMSprop()
m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
m.compile(opt, loss='mse')
data = np.arange(100).reshape(5, 20)
labels = np.zeros(5)
print('Training'); results = m.fit(data, labels)
Training ...
len(opt.get_weights())
3
Возвращает
Значения весов в виде списка массивов NumPy.

minimize

Просмотреть исходный код

minimize(
    loss, var_list, grad_loss=None, name=None
)

Минимизирует loss, обновляя var_list.

Этот метод просто вычисляет градиент с помощью tf.GradientTape и вызывает apply_gradients(). Если вы хотите обработать градиент перед применением, то вызовите tf.GradientTape и apply_gradients() явно вместо использования этой функции.

Аргументы
loss Функция без аргументов, возвращающая значение, которое нужно минимизировать.
var_list Список или кортеж объектов Variable, которые нужно обновить, чтобы минимизировать loss, или функция, возвращающая список или кортеж объектов Variable. Используйте функцию, когда список переменных был бы неполным до minimize, поскольку переменные создаются в первый раз, когда вызывается loss.
grad_loss Необязательно. Объект Tensor, содержащий градиент, вычисленный для loss.
name Необязательное имя для возвращаемой операции.
Возвращает
Объект Operation, который обновляет переменные в var_list. Счётчик iterations будет автоматически увеличен на 1.
Исключения
ValueError Если некоторые из переменных не являются объектами Variable.

set_weights

Просмотреть исходный код

set_weights(
    weights
)

Устанавливает веса оптимизатора.

Веса оптимизатора — это его состояние (т.е. переменные). Эта функция принимает значения весов, связанные с этим оптимизатором, в виде списка массивов NumPy. Первое значение всегда — счётчик итераций оптимизатора, а за ним — переменные состояния оптимизатора в порядке их создания. Переданные значения используются для установки нового состояния оптимизатора.

Например, оптимизатор RMSprop для этой простой модели принимает список из трёх значений — счётчик итераций, а затем среднеквадратичное значение для ядра и смещения единственного слоя Dense:

opt = tf.keras.optimizers.RMSprop()
m = tf.keras.models.Sequential([tf.keras.layers.Dense(10)])
m.compile(opt, loss='mse')
data = np.arange(100).reshape(5, 20)
labels = np.zeros(5)
print('Training'); results = m.fit(data, labels)
Training ...
new_weights = [np.array(10), np.ones([20, 10]), np.zeros([10])]
opt.set_weights(new_weights)
opt.iterations
<tf.Variable 'RMSprop/iter:0' shape=() dtype=int64, numpy=10>
Аргументы
weights Значения весов в виде списка массивов NumPy.

variables

Просмотреть исходный код

variables()

Возвращает переменные данного оптимизатора в порядке их создания.

© 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/keras/mixed_precision/experimental/LossScaleOptimizer

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API