ASGD
-
class torch.optim.ASGD(params, lr=0.01, lambd=0.0001, alpha=0.75, t0=1000000.0, weight_decay=0, foreach=None, maximize=False, differentiable=False)[source] -
Реализует усреднённый стохастический градиентный спуск.
Он был предложен в Ускорение стохастического приближения с помощью усреднения.
- Параметры
-
- params (iterable) – итерируемый набор параметров для оптимизации или словари, определяющие группы параметров
- lr (float, необязательно) – скорость обучения (по умолчанию: 1e-2)
- lambd (float, необязательно) – член затухания (по умолчанию: 1e-4)
- alpha (float, необязательно) – показатель степени для обновления eta (по умолчанию: 0.75)
- t0 (float, необязательно) – точка, с которой начинается усреднение (по умолчанию: 1e6)
- weight_decay (float, необязательно) – сжатие весов (штраф L2) (по умолчанию: 0)
- foreach (bool, необязательно) – используется ли реализация оптимизатора foreach. Если пользователь не указывает (т.е. foreach равно None), мы будем пытаться использовать foreach вместо цикла for на CUDA, так как он обычно значительно производительнее. Обратите внимание, что реализация foreach использует примерно sizeof(params) больше пиковой памяти, чем версия цикла for, из-за того, что промежуточные значения являются списком тензоров, а не просто одним тензором. Если память ограничена, отправляйте меньше параметров в оптимизатор за раз или установите этот флаг в значение False (по умолчанию: None)
- maximize (bool, необязательно) – максимизировать параметры на основе целевой функции вместо минимизации (по умолчанию: False)
- differentiable (bool, необязательно) – нужно ли использовать autograd при шаге оптимизации обучения. В противном случае функция step() выполняется в контексте torch.no_grad(). Установка в значение True может ухудшить производительность, поэтому оставьте значение False, если вы не планируете использовать autograd с этим экземпляром (по умолчанию: False)
-
add_param_group(param_group) -
Добавляет группу параметров в
Optimizer.Это может быть полезно при доработке предварительно обученной сети, так как замороженные слои можно сделать обучаемыми и добавить их в
Optimizerпо мере прогресса обучения.- Параметры
-
param_group (dict) – Указывает, какие тензоры должны быть оптимизированы вместе с группами оптимизационных параметров.
-
load_state_dict(state_dict) -
Загружает состояние оптимизатора.
- Параметры
-
state_dict (dict) – состояние оптимизатора. Должно быть объектом, возвращаемым из вызова
state_dict().
-
register_load_state_dict_post_hook(hook, prepend=False) -
Регистрирует пост-хук load_state_dict, который вызывается после вызова
load_state_dict(). Он должен иметь следующий формат:hook(optimizer) -> None
Аргумент
optimizer— это экземпляр оптимизатора, используемого.Хук будет вызван с аргументом
selfпосле вызоваload_state_dictдляself. Зарегистрированный хук можно использовать для выполнения пост-обработки после того, какload_state_dictзагрузилstate_dict.- Параметры
-
- hook (Callable) – Пользовательский хук, подлежащий регистрации.
-
prepend (bool) – Если True, предоставленный пост-хук будет вызван до всех уже зарегистрированных пост-хуков для
load_state_dict. В противном случае предоставленный пост-хук будет вызван после всех уже зарегистрированных пост-хуков. (по умолчанию: False)
- Возвращает
-
дескриптор, который можно использовать для удаления добавленного хука, вызвав
handle.remove() - Тип возвращаемого значения
-
torch.utils.hooks.RemoveableHandle
-
register_load_state_dict_pre_hook(hook, prepend=False) -
Регистрирует пре-хук load_state_dict, который будет вызван перед вызовом
load_state_dict(). Он должен иметь следующий формат:hook(optimizer, state_dict) -> state_dict or None
Аргумент
optimizer— это экземпляр оптимизатора, используемого, а аргументstate_dict— это поверхностная копияstate_dictпереданная пользователем вload_state_dict. Хук может изменять state_dict на месте или, по желанию, возвращать новый. Если возвращается state_dict, он будет загружен в оптимизатор.Хук будет вызван с аргументом
selfиstate_dictперед вызовомload_state_dictдляself. Зарегистрированный хук может быть использован для выполнения предварительной обработки перед выполнением вызоваload_state_dict.- Параметры
-
- hook (Callable) – Пользовательский хук, подлежащий регистрации.
-
prepend (bool) – Если True, предоставленный пре-хук будет вызван до всех уже зарегистрированных пре-хуков для
load_state_dict. В противном случае предоставленный пре-хук будет вызван после всех уже зарегистрированных пре-хуков. (по умолчанию: False)
- Возвращает
-
дескриптор, который можно использовать для удаления добавленного хука, вызвав
handle.remove() - Тип возвращаемого значения
-
torch.utils.hooks.RemoveableHandle
-
register_state_dict_post_hook(hook, prepend=False) -
Регистрирует пост-хук state_dict, который будет вызван после вызова
state_dict(). Он должен иметь следующий формат:hook(optimizer, state_dict) -> state_dict or None
Хук будет вызван с аргументами
selfиstate_dictпосле созданияstate_dictдляself. Хук может изменять state_dict на месте или, по желанию, возвращать новый. Зарегистрированный хук может быть использован для выполнения пост-обработки наstate_dictперед возвратом.- Параметры
-
- hook (Callable) – Пользовательский хук, подлежащий регистрации.
-
prepend (bool) – Если True, предоставленный пост-хук будет вызван до всех уже зарегистрированных пост-хуков для
state_dict. В противном случае предоставленный пост-хук будет вызван после всех уже зарегистрированных пост-хуков. (по умолчанию: False)
- Возвращает
-
дескриптор, который можно использовать для удаления добавленного хука, вызвав
handle.remove() - Тип возвращаемого значения
-
torch.utils.hooks.RemoveableHandle
-
register_state_dict_pre_hook(hook, prepend=False) -
Регистрирует пре-хук state_dict, который будет вызван перед вызовом
state_dict(). Он должен иметь следующий формат:hook(optimizer) -> None
Аргумент
optimizer— это экземпляр оптимизатора, используемого. Хук будет вызван с аргументомselfперед вызовомstate_dictдляself. Зарегистрированный хук может быть использован для выполнения предварительной обработки перед вызовомstate_dict.- Параметры
-
- hook (Callable) – Пользовательский хук, подлежащий регистрации.
-
prepend (bool) – Если True, предоставленный пре-хук будет вызван до всех уже зарегистрированных пре-хуков для
state_dict. В противном случае предоставленный пре-хук будет вызван после всех уже зарегистрированных пре-хуков. (по умолчанию: False)
- Возвращает
-
дескриптор, который можно использовать для удаления добавленного хука, вызвав
handle.remove() - Тип возвращаемого значения
-
torch.utils.hooks.RemoveableHandle
-
register_step_post_hook(hook) -
Регистрация обработчика шага оптимизатора после шага, который будет вызван после шага оптимизатора. Он должен иметь следующую сигнатуру:
hook(optimizer, args, kwargs) -> None
Аргумент
optimizer— это экземпляр оптимизатора, используемый.- Параметры
-
hook (Callable) — пользовательский обработчик, подлежащий регистрации.
- Возвращаемое значение
-
обработчик, который можно использовать для удаления добавленного обработчика, вызвав
handle.remove() - Тип возвращаемого значения
-
torch.utils.hooks.RemovableHandle
-
register_step_pre_hook(hook) -
Регистрация обработчика шага оптимизатора перед шагом, который будет вызван перед шагом оптимизатора. Он должен иметь следующую сигнатуру:
hook(optimizer, args, kwargs) -> None or modified args and kwargs
Аргумент
optimizer— это экземпляр оптимизатора, используемый. Если args и kwargs изменяются обработчиком предварительной обработки, то преобразованные значения возвращаются в виде кортежа, содержащего new_args и new_kwargs.- Параметры
-
hook (Callable) — пользовательский обработчик, подлежащий регистрации.
- Возвращаемое значение
-
обработчик, который можно использовать для удаления добавленного обработчика, вызвав
handle.remove() - Тип возвращаемого значения
-
torch.utils.hooks.RemovableHandle
-
state_dict() -
Возвращает состояние оптимизатора в виде
dict.Он содержит две записи:
-
-
state: a Dict holding current optimization state. Its content -
отличается в зависимости от классов оптимизаторов, но некоторые общие характеристики сохраняются. Например, состояние сохраняется на параметр, а сам параметр НЕ сохраняется.
state— это словарь, сопоставляющий идентификаторы параметров с словарем, содержащим состояние, соответствующее каждому параметру.
-
-
-
param_groups: a List containing all parameter groups where each -
группа параметров — это словарь. Каждая группа параметров содержит метаданные, специфичные для оптимизатора, такие как скорость обучения и сглаживание весов, а также список идентификаторов параметров параметров в группе.
-
ПРИМЕЧАНИЕ: Идентификаторы параметров могут выглядеть как индексы, но они просто идентификаторы, связывающие состояние с param_group. При загрузке из state_dict оптимизатор будет связывать param_group
params(целочисленные идентификаторы) и оптимизаторparam_groups(фактическиеnn.Parameter) для сопоставления состояния БЕЗ дополнительной проверки.Возвращаемый словарь состояния может выглядеть примерно так:
{ 'state': { 0: {'momentum_buffer': tensor(...), ...}, 1: {'momentum_buffer': tensor(...), ...}, 2: {'momentum_buffer': tensor(...), ...}, 3: {'momentum_buffer': tensor(...), ...} }, 'param_groups': [ { 'lr': 0.01, 'weight_decay': 0, ... 'params': [0] }, { 'lr': 0.001, 'weight_decay': 0.5, ... 'params': [1, 2, 3] } ] } -
-
step(closure=None)[source] -
Выполняет один шаг оптимизации.
- Параметры
-
closure (Callable, необязательно) — замыкание, которое переоценивает модель и возвращает потерю.
-
zero_grad(set_to_none=True) -
Сбрасывает градиенты всех оптимизированных
torch.Tensor.- Параметры
-
set_to_none (bool) — вместо установки в ноль установить градиенты в None. Это в целом потребует меньше памяти и может немного улучшить производительность. Однако это меняет определенное поведение. Например: 1. Когда пользователь пытается получить доступ к градиенту и выполнить ручные операции над ним, атрибут None или тензор, заполненный нулями, будут вести себя по-разному. 2. Если пользователь запросит
zero_grad(set_to_none=True), за которым следует обратный проход, градиенты.gradбудут гарантированно равны None для параметров, которые не получили градиент. 3. Дляtorch.optimоптимизаторов поведение отличается, если градиент равен 0 или None (в одном случае он выполняет шаг с градиентом 0, а в другом — пропускает шаг).
-
© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.optim.ASGD.html