tf.keras.optimizers.SGD
| Просмотреть исходный код на GitHub |
Оптимизатор градиентного спуска (с моментом).
Наследуется от: Optimizer
tf.keras.optimizers.SGD(
learning_rate=0.01, momentum=0.0, nesterov=False, name='SGD', **kwargs
)
Правило обновления параметра w с градиентом g при momentum равно 0:
w = w - learning_rate * g
Правило обновления при momentum больше 0:
velocity = momentum * velocity - learning_rate * g w = w * velocity
Когда nesterov=False, это правило становится:
velocity = momentum * velocity - learning_rate * g w = w + momentum * velocity - learning_rate * g
| Аргументы | |
|---|---|
learning_rate | Значение типа float, плавающей точки или расписание, являющееся tf.keras.optimizers.schedules.LearningRateSchedule, или вызываемая функция без аргументов, возвращающая фактическое значение для использования. Скорость обучения. По умолчанию 0,01. |
momentum | Вещественный гиперпараметр ≥ 0, ускоряющий градиентный спуск в соответствующем направлении и сглаживающий колебания. По умолчанию 0, т.е. обычный градиентный спуск. |
nesterov | Булево значение. Применять ли импульс Нестерова. По умолчанию False. |
name | Дополнительное префиксное имя для операций, созданных при применении градиентов. По умолчанию "SGD". |
**kwargs | Дополнительные аргументы. Разрешается использовать "clipnorm" или "clipvalue". "clipnorm" (float) ограничивает градиенты по норме; "clipvalue" (float) ограничивает градиенты по значению. |
Использование:
opt = tf.keras.optimizers.SGD(learning_rate=0.1) var = tf.Variable(1.0) loss = lambda: (var ** 2)/2.0 # d(loss)/d(var1) = var1 step_count = opt.minimize(loss, [var]).numpy() # Step is `- learning_rate * grad` var.numpy() 0.9
opt = tf.keras.optimizers.SGD(learning_rate=0.1, momentum=0.9) var = tf.Variable(1.0) val0 = var.value() loss = lambda: (var ** 2)/2.0 # d(loss)/d(var1) = var1 # First step is `- learning_rate * grad` step_count = opt.minimize(loss, [var]).numpy() val1 = var.value() (val0 - val1).numpy() 0.1 # On later steps, step-size increases because of momentum step_count = opt.minimize(loss, [var]).numpy() val2 = var.value() (val1 - val2).numpy() 0.18
Справочная информация:
- Для
nesterov=True, см. Sutskever и др., 2013.
| Аргументы | |
|---|---|
name | Непустая строка. Имя для накопителей, созданных для оптимизатора. |
**kwargs | Дополнительные аргументы. Разрешается использовать {clipnorm, clipvalue, lr, decay}. clipnorm — ограничение градиентов по норме; clipvalue — ограничение градиентов по значению; decay — включено для обратной совместимости, для разрешения обратного экспоненциального уменьшения скорости обучения. lr — включено для обратной совместимости, рекомендуется использовать learning_rate вместо этого. |
| Исключения | |
|---|---|
ValueError | В случае неправильного имени. |
| Атрибуты | |
|---|---|
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.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_slot
get_slot(
var, slot_name
)
get_slot_names
get_slot_names()
Список имён хранилищ этого оптимизатора.
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/optimizers/SGD