Spec-Zone.ru › TensorFlow 1.15

tf.keras.optimizers.Optimizer

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

Базовый класс для оптимизаторов.

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

Псевдонимы

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

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

tf.compat.v1.keras.optimizers.Optimizer, `tf.compat.v2.keras.optimizers.Optimizer`, `tf.compat.v2.optimizers.Optimizer`

tf.keras.optimizers.Optimizer(
    name, **kwargs
)

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

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

# Create an optimizer with the desired parameters.
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
# `loss` is a callable that takes no argument and returns the value
# to minimize.
loss = lambda: 3 * var1 * var1 + 2 * var2 * var2
# In graph mode, returns op that minimizes the loss by updating the listed
# variables.
opt_op = opt.minimize(loss, var_list=[var1, var2])
opt_op.run()
# In eager mode, simply call minimize to update the list of variables.
opt.minimize(loss, var_list=[var1, var2])

Пользовательский цикл обучения с моделями Keras

В моделях Keras иногда переменные создаются при первом вызове модели, а не во время создания. Примеры включают 1) последовательные модели без предварительно определённой формы входных данных или 2) подклассированные модели. В этих случаях передайте var_list как вызываемую функцию.

Пример:

opt = tf.keras.optimizers.SGD(learning_rate=0.1)
model = tf.keras.Sequential()
model.add(tf.keras.layers.Dense(num_hidden, activation='relu'))
model.add(tf.keras.layers.Dense(num_classes, activation='sigmoid'))
loss_fn = lambda: tf.keras.losses.mse(model(input), output)
var_list_fn = lambda: model.trainable_weights
for input, output in data:
  opt.minimize(loss_fn, var_list_fn)

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

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

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

Пример:

# Create an optimizer.
opt = tf.keras.optimizers.SGD(learning_rate=0.1)

# Compute the gradients for a list of variables.
with tf.GradientTape() as tape:
  loss = <call_loss_function>
vars = <list_of_variables>
grads = tape.gradient(loss, vars)

# Process the gradients, for example cap them, etc.
# capped_grads = [MyCapper(g) for g in grads]
processed_grads = [process_gradient(g) for g in grads]

# Ask the optimizer to apply the processed gradients.
opt.apply_gradients(zip(processed_grads, var_list))

Использование с tf.distribute.Strategy.

Этот класс оптимизатора tf.distribute.Strategy -сознательный, что означает, что он автоматически суммирует градиенты по всем репликам. Чтобы усреднить градиенты, разделите свою потерю на глобальный размер пакета, что выполняется автоматически, если вы используете встроенные циклы обучения или оценки tf.keras. Обратитесь к аргументу reduction вашей функции потерь, который должен быть установлен на tf.keras.losses.Reduction.SUM_OVER_BATCH_SIZE для усреднения или tf.keras.losses.Reduction.SUM для не усреднения.

Если вы не используете это и хотите усреднить градиенты, вы должны использовать tf.math.reduce_sum для суммирования ваших потерь на пример и затем разделить на глобальный размер пакета. Обратите внимание, что при использовании tf.distribute.Strategy, первый компонент формы тензора — это локальный размер пакета реплики, который отличается на множитель, равный числу реплик, используемых для вычисления одного шага. В результате использование tf.math.reduce_mean даст неправильный ответ, что приведёт к градиентам, которые могут быть во много раз больше.

Ограничение переменных

Все оптимизаторы Keras соблюдают ограничения переменных. Если функция ограничения передается какой-либо переменной, ограничение будет применено к переменной после того, как градиент был применен к переменной. Важно: если градиент — это разреженный тензор, ограничение переменных не поддерживается.

Совместимость с потоками

Весь оптимизатор в настоящее время совместим с потоками, но не потокобезопасен. При необходимости пользователь должен выполнить синхронизацию.

Слот

Многие подклассы оптимизаторов, такие как Adam и Adagrad, выделяют и управляют дополнительными переменными, связанными с переменными для обучения. Они называются слотами. У слотов есть имена, и вы можете запросить у оптимизатора имена слотов, которые он использует. После того, как у вас есть имя слота, вы можете запросить у оптимизатора переменную, созданную для хранения значения слота.

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

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

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

Гиперпараметры могут быть переписаны через код пользователя:

Пример:

# Create an optimizer with the desired parameters.
opt = tf.keras.optimizers.SGD(learning_rate=0.1)
# `loss` is a callable that takes no argument and returns the value
# to minimize.
loss = lambda: 3 * var1 + 2 * var2
# In eager mode, simply call minimize to update the list of variables.
opt.minimize(loss, var_list=[var1, var2])
# update learning rate
opt.learning_rate = 0.05
opt.minimize(loss, var_list=[var1, var2])

Написание настраиваемого оптимизатора.

Если вы намерены создать свой собственный алгоритм оптимизации, просто унаследуйте от этого класса и переопределите следующие методы:

  • resource_apply_dense (обновление переменной, если тензор градиента плотный)
  • resource_apply_sparse (обновление переменной, если тензор градиента разреженный)
  • create_slots (если ваш алгоритм оптимизации требует дополнительных переменных)
  • get_config (сериализация оптимизатора, включая все гиперпараметры)
Аргументы
name Непустая строка. Имя, используемое для созданных для оптимизатора аккумуляторов.
**kwargs ключевые аргументы. Допускается {clipnorm, clipvalue, lr, decay}. clipnorm - ограничение градиентов по норме; clipvalue - ограничение градиентов по значению, decay включено для обратной совместимости, чтобы разрешить обратное обратное затухание скорости обучения. lr включено для обратной совместимости, рекомендуется использовать learning_rate вместо него.
Исключения
ValueError Если имя имеет неправильный формат.
RuntimeError Если _create_slots был переопределён вместо _create_vars.
Атрибуты
iterations Переменная. Количество шагов обучения, которые выполнил этот оптимизатор.
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.VariableAggregation.NONE
)

apply_gradients

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

apply_gradients(
    grads_and_vars, name=None
)

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

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

Аргументы
grads_and_vars Список пар (градиент, переменная).
name Необязательное имя возвращаемой операции. По умолчанию принимает имя, переданное конструктору Optimizer.
Возвращаемое значение
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

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

@abc.abstractmethod
get_config()

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

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

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

get_gradients

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

get_gradients(
    loss, params
)

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

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

get_slot

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

get_slot(
    var, slot_name
)

get_slot_names

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

get_slot_names()

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

get_updates

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

get_updates(
    loss, params
)

get_weights

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

get_weights()

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 Необязательное имя для возвращаемой операции.
Возвращаемое значение
Операция, обновляющая переменные в var_list. Если global_step не был None, эта операция также увеличивает global_step.
Исключения
ValueError Если некоторые переменные не являются объектами Variable.

set_weights

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

set_weights(
    weights
)

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/r1.15/api_docs/python/tf/keras/optimizers/Optimizer

Spec-Zone.ru

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