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() выполняет вычисление градиентов и их применение к переменным. Если вы хотите обработать градиенты перед их применением, вы можете использовать оптимизатор в три этапа:
- Вычислите градиенты с помощью
compute_gradients(). - Обработайте градиенты как вам нужно.
- Примените обработанные градиенты с помощью
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().
| Возвращаемое значение | |
|---|---|
| Список строк. |
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