LBFGS
-
class torch.optim.LBFGS(params, lr=1, max_iter=20, max_eval=None, tolerance_grad=1e-07, tolerance_change=1e-09, history_size=100, line_search_fn=None)[source] -
Реализует алгоритм L-BFGS, сильно вдохновлённый minFunc.
Предупреждение
Этот оптимизатор не поддерживает параметры на уровне каждого параметра и группы параметров (может быть только один).
Предупреждение
В настоящее время все параметры должны находиться на одном устройстве. Это будет улучшено в будущем.
Примечание
Это очень ресурсоёмкий оптимизатор (он требует дополнительных
param_bytes * (history_size + 1)байт). Если он не помещается в оперативную память, попробуйте уменьшить размер истории или используйте другой алгоритм.- Параметры
-
- lr (float) – скорость обучения (по умолчанию: 1)
- max_iter (int) – максимальное количество итераций за один шаг оптимизации (по умолчанию: 20)
- max_eval (int) – максимальное количество вычислений функции за один шаг оптимизации (по умолчанию: max_iter * 1.25).
- tolerance_grad (float) – значение допуска по первой производной для завершения оптимизации (по умолчанию: 1e-7).
- tolerance_change (float) – значение допуска по изменениям значения функции/параметров для завершения оптимизации (по умолчанию: 1e-9).
- history_size (int) – размер истории обновлений (по умолчанию: 100).
- line_search_fn (str) – либо ‘strong_wolfe’, либо None (по умолчанию: None).
-
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)[source] -
Выполняет один шаг оптимизации.
- Параметры
-
closure (Callable) — замыкание, которое повторно оценивает модель и возвращает потерю.
-
zero_grad(set_to_none=True) -
Сбрасывает градиенты всех оптимизируемых
torch.Tensor.- Параметры
-
set_to_none (bool) — вместо сброса до нуля, установить градиенты в None. Это, как правило, потребует меньшего объёма памяти и может немного улучшить производительность. Однако это изменяет некоторые поведения. Например: 1. Когда пользователь пытается получить доступ к градиенту и выполнить на нем ручные операции, атрибут None или тензор, заполненный 0, будет вести себя по-разному. 2. Если пользователь запрашивает
zero_grad(set_to_none=True)за которым следует обратное распространение, градиенты для параметров, которые не получили градиент, гарантированно будут 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.LBFGS.html