Spec-Zone.ru › TensorFlow 1.15

tf.contrib.optimizer_v2.OptimizerV2

Обновленный базовый класс для оптимизаторов.

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

tf.contrib.optimizer_v2.OptimizerV2(
    use_locking, name
)

Этот класс определяет API для добавления операций для обучения модели. Вы никогда не используете этот класс напрямую, а вместо этого создаёте экземпляр одного из его подклассов, таких как GradientDescentOptimizer, AdagradOptimizer, или MomentumOptimizer.

Использование

# Create an optimizer with the desired parameters.
opt = GradientDescentOptimizer(learning_rate=0.1)
# Add Ops to the graph to minimize a cost by updating a list of variables.
# "cost" is a Tensor, and the list of variables contains tf.Variable
# objects.
opt_op = opt.minimize(cost, var_list=<list of variables>)

В программе обучения вам нужно будет только выполнить возвращённую операцию.

# Execute opt_op to do one step of training:
opt_op.run()

Обработка градиентов перед их применением.

Вызов minimize() выполняет вычисление градиентов и их применение к переменным. Если вы хотите обработать градиенты перед их применением, вы можете использовать оптимизатор в три этапа:

  1. Вычислите градиенты с помощью compute_gradients().
  2. Обработайте градиенты как вам нужно.
  3. Примените обработанные градиенты с помощью apply_gradients().

Пример:

# Create an optimizer.
opt = GradientDescentOptimizer(learning_rate=0.1)

# Compute the gradients for a list of variables.
grads_and_vars = opt.compute_gradients(loss, <list of variables>)

# grads_and_vars is a list of tuples (gradient, variable).  Do whatever you
# need to the 'gradient' part, for example cap them, etc.
capped_grads_and_vars = [(MyCapper(gv[0]), gv[1]) for gv in grads_and_vars]

# Ask the optimizer to apply the capped gradients.
opt.apply_gradients(capped_grads_and_vars)

Управление градиентами

Как minimize() так и compute_gradients() принимают аргумент gate_gradients, который управляет степенью параллелизма во время применения градиентов.

Возможные значения: GATE_NONE, GATE_OP, и GATE_GRAPH.

GATE_NONE: Вычисляйте и применяйте градиенты параллельно. Это обеспечивает максимальную параллельность выполнения, за счёт некоторой невоспроизводимости результатов. Например, два градиента matmul зависят от входных значений: С GATE_NONE один из градиентов может быть применён к одному из входов *до* вычисления другого градиента, что приводит к невоспроизводимым результатам.

GATE_OP: Для каждой операции убедитесь, что все градиенты вычислены перед их использованием. Это предотвращает гонки для операций, генерирующих градиенты для нескольких входов, где градиенты зависят от входов.

GATE_GRAPH: Убедитесь, что все градиенты для всех переменных вычислены до использования любого из них. Это обеспечивает наименьшую параллельность, но может быть полезно, если вы хотите обработать все градиенты перед применением любого из них.

Слотовые переменные

Некоторые подклассы оптимизаторов, такие как MomentumOptimizer и AdagradOptimizer выделяют и управляют дополнительными переменными, связанными с переменными для обучения. Они называются Слотовыми переменными. Слотовые переменные имеют имена, и вы можете запросить у оптимизатора имена слотов, которые он использует. После получения имени слота вы можете запросить у оптимизатора переменную, созданную для хранения значения слота.

Это может быть полезно, если вы хотите вести журнал отладки алгоритма обучения, сообщать статистику о слотах и т. д.

Переменные, не являющиеся слотами

Некоторые подклассы оптимизаторов, такие как AdamOptimizer имеют переменные, которые не связаны с переменными для обучения, только сам шаг.

Гиперпараметры

Это аргументы, передаваемые в конструктор подкласса оптимизатора (метод __init__), а затем передаваемые в self._set_hyper(). Они могут быть либо обычными значениями Python (например, 1.0), тензорами, либо вызовами. Если они являются вызовами, вызов будет выполнен во время apply_gradients() для получения значения гиперпараметра.

Состояние

Внутренние методы получают аргумент state с правильными значениями для использования в слотовых и не-слотовых переменных, а также гиперпараметрах.

Аргументы
use_locking Булево. Если True, использовать блокировки для предотвращения одновременных обновлений переменных.
name Непустая строка. Имя для накопителей, созданных для оптимизатора.
Исключения
ValueError Если имя имеет неправильный формат.
RuntimeError Если _create_slots был переопределён вместо _create_vars.

Методы

apply_gradients

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

apply_gradients(
    grads_and_vars, global_step=None, name=None
)

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

Это вторая часть minimize(). Возвращает Operation для применения градиентов.

Аргументы
grads_and_vars Список пар (градиент, переменная), возвращаемых compute_gradients() .
global_step Необязательный Variable, увеличивающийся на единицу после обновления переменных.
name Необязательное имя возвращаемой операции. По умолчанию, имя, переданное в конструктор Optimizer .
Возвращаемое значение
Operation для применения указанных градиентов. Если global_step не равно None, эта операция также увеличивает global_step.
Исключения
TypeError Если grads_and_vars имеет неправильный формат.
ValueError Если ни одна из переменных не имеет градиентов.

compute_gradients

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

compute_gradients(
    loss, var_list=None, gate_gradients=GATE_OP, aggregation_method=None,
    grad_loss=None, stop_gradients=None, scale_loss_by_num_replicas=False
)

Вычислить градиенты loss для переменных в var_list.

Это первая часть minimize(). Возвращает список пар (градиент, переменная), где "градиент" — градиент для "переменной". Обратите внимание, что "градиент" может быть Tensor, IndexedSlices, или None , если для данной переменной нет градиента.

Аргументы
loss Тензор, содержащий значение для минимизации, или вызываемый объект, не принимающий аргументы, возвращающий значение для минимизации. При включенном режиме eager execution он должен быть вызываемым объектом.
var_list Необязательный список или кортеж tf.Variable для обновления, чтобы минимизировать loss. По умолчанию, список переменных, собранных в графе под ключом GraphKeys.TRAINABLE_VARIABLES.
gate_gradients Способ управления вычислением градиентов. Может быть GATE_NONE, GATE_OP, или GATE_GRAPH.
aggregation_method Указывает метод объединения градиентов. Допустимые значения определены в классе AggregationMethod.
grad_loss Необязательно. Tensor , содержащий градиент, вычисленный для loss .
stop_gradients Необязательно. Тензор или список тензоров, через которые не выполнять дифференцирование.
scale_loss_by_num_replicas Необязательный булевый параметр. Если true, уменьшать потерю на количество реплик. УСТАРЕЛО и, как правило, больше не требуется.
Возвращаемое значение
Список пар (градиент, переменная). Переменная всегда присутствует, но градиент может быть None .
Исключения
TypeError Если var_list содержит что-либо кроме объектов Variable .
ValueError Если некоторые аргументы некорректны.
RuntimeError Если вызов сделан с включённым режимом eager execution, а loss не является вызываемым объектом.

Совместимость с eager execution

При включённом режиме eager execution gate_gradients, и aggregation_method игнорируются.

get_name

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

get_name()

get_slot

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

get_slot(
    var, name
)

Возвращает слот с именем name , созданный для var оптимизатором.

Некоторые подклассы оптимизаторов используют дополнительные переменные. Например, Momentum и Adagrad используют переменные для накопления обновлений. Этот метод предоставляет доступ к этим Variable объектам, если они по какой-то причине вам нужны.

Используйте get_slot_names() для получения списка имён слотов, созданных Optimizer.

Аргументы
var Переменная, переданная в minimize() или apply_gradients() .
name Строка.
Возвращаемое значение
Variable для слота, если он был создан, None в противном случае.

get_slot_names

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

get_slot_names()

Возвращает список имён слотов, созданных Optimizer.

См. get_slot().

END_OF_DOCUMENT_MARKER
Возвращаемое значение
Список строк.

minimize

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

minimize(
    loss, global_step=None, var_list=None, gate_gradients=GATE_OP,
    aggregation_method=None, name=None, grad_loss=None, stop_gradients=None,
    scale_loss_by_num_replicas=False
)

Добавить операции для минимизации 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.
name Необязательное имя возвращаемой операции.
grad_loss Необязательно. Tensor , содержащий градиент, вычисленный для loss.
stop_gradients Необязательно. Тензор или список тензоров, через которые не нужно дифференцировать.
scale_loss_by_num_replicas Необязательный булевый параметр. Если True, масштабирует потерю вниз на число реплик. УСТАРЕВШИЙ и, как правило, больше не нужен.
Возвращаемое значение
Операция, которая обновляет переменные в var_list. Если global_step не был None, эта операция также увеличивает global_step.
Исключения
ValueError Если некоторые из переменных не являются объектами Variable .

Совместимость с Eager

При включенном выполнении Eager, loss должна быть функцией Python, которая принимает элементы var_list в качестве аргументов и вычисляет значение, которое нужно минимизировать. Если var_list равно None, loss не должна принимать никаких аргументов. Минимизация (и вычисление градиента) выполняется относительно элементов var_list если оно не равно None, иначе относительно любых обучаемых переменных, созданных во время выполнения функции loss. gate_gradients, aggregation_method, и grad_loss игнорируются при включенном выполнении Eager.

variables

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

variables()

Список переменных, которые кодируют текущее состояние Optimizer.

Включает переменные слотов и дополнительные глобальные переменные, созданные оптимизатором в текущем графике по умолчанию.

Возвращаемое значение
Список переменных.

Переменные класса

  • 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/r1.15/api_docs/python/tf/contrib/optimizer_v2/OptimizerV2

Spec-Zone.ru

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