Spec-Zone.ru › PyTorch 2

Rprop

class torch.optim.Rprop(params, lr=0.01, etas=(0.5, 1.2), step_sizes=(1e-06, 50), *, foreach=None, maximize=False, differentiable=False) [source]

Реализует алгоритм обратного распространения ошибки с резистивным управлением.

входные данные:θ0∈Rd (параметры),f(θ) (объективная функция),η+/− (etaplus, etaminus),Γmax/min (шаги)инициализация:gprev0←0,η0←lr (скорость обучения)дляt=1по…делатьgt←∇θft(θt−1)дляi=0,1,…,d−1сделатьеслиgprevigti>0ηti←min(ηt−1iη+,Γmax)иначе еслиgprevigti<0ηti←max(ηt−1iη−,Γmin)gti←0иначеηti←ηt−1iθt←θt−1−ηtsign(gt)gprev←gtвернутьθt\begin{aligned} &\rule{110mm}{0.4pt} \\ &\textbf{входные данные} : \theta_0 \in \mathbf{R}^d \text{ (параметры)},f(\theta) \text{ (объективная функция)}, \\ &\hspace{13mm} \eta_{+/-} \text{ (etaplus, etaminus)}, \Gamma_{max/min} \text{ (шаги)} \\ &\textbf{инициализация} : g^0_{prev} \leftarrow 0, \: \eta_0 \leftarrow \text{lr (скорость обучения)} \\ &\rule{110mm}{0.4pt} \\ &\textbf{для} \: t=1 \: \textbf{по} \: \ldots \: \textbf{делать} \\ &\hspace{5mm}g_t \leftarrow \nabla_{\theta} f_t (\theta_{t-1}) \\ &\hspace{5mm} \textbf{для} \text{ } i = 0, 1, \ldots, d-1 \: \mathbf{сделать} \\ &\hspace{10mm} \textbf{если} \: g^i_{prev} g^i_t > 0 \\ &\hspace{15mm} \eta^i_t \leftarrow \mathrm{min}(\eta^i_{t-1} \eta_{+}, \Gamma_{max}) \\ &\hspace{10mm} \textbf{иначе если} \: g^i_{prev} g^i_t < 0 \\ &\hspace{15mm} \eta^i_t \leftarrow \mathrm{max}(\eta^i_{t-1} \eta_{-}, \Gamma_{min}) \\ &\hspace{15mm} g^i_t \leftarrow 0 \\ &\hspace{10mm} \textbf{иначе} \: \\ &\hspace{15mm} \eta^i_t \leftarrow \eta^i_{t-1} \\ &\hspace{5mm}\theta_t \leftarrow \theta_{t-1}- \eta_t \mathrm{sign}(g_t) \\ &\hspace{5mm}g_{prev} \leftarrow g_t \\ &\rule{110mm}{0.4pt} \\[-1.ex] &\bf{вернуть} \: \theta_t \\[-1.ex] &\rule{110mm}{0.4pt} \\[-1.ex] \end{aligned}

Для получения дополнительной информации об алгоритме обратитесь к статье A Direct Adaptive Method for Faster Backpropagation Learning: The RPROP Algorithm.

Параметры
  • params (iterable) – iterable параметров для оптимизации или словари, определяющие группы параметров
  • lr (float, необязательно) – скорость обучения (по умолчанию: 1e-2)
  • etas (Tuple[float, float], необязательно) – пара (etaminus, etaplus), которые являются множителями увеличения и уменьшения (по умолчанию: (0.5, 1.2))
  • step_sizes (Tuple[float, float], необязательно) – пара минимального и максимального допустимого размера шага (по умолчанию: (1e-6, 50))
  • foreach (bool, необязательно) – используется ли реализация оптимизатора foreach. Если пользователь не укажет (так foreach равен None), мы попробуем использовать foreach над реализацией цикла for на CUDA, так как она обычно значительно производительнее. Обратите внимание, что реализация foreach использует ~ sizeof(params) больше пиковой памяти, чем версия цикла for, из-за того, что промежуточные значения являются списком тензоров, а не просто одним тензором. Если память ограничена, передавайте меньше параметров через оптимизатор за раз или установите этот флаг в False (по умолчанию: None)
  • maximize (bool, необязательно) – максимизировать параметры по объективной функции вместо минимизации (по умолчанию: False)
  • differentiable (bool, необязательно) – должен ли происходить автоградиент через шаг оптимизатора при обучении. В противном случае функция step() выполняется в контексте torch.no_grad(). Установка в True может ухудшить производительность, поэтому оставьте ее False, если вы не планируете запускать автоградиент через этот экземпляр (по умолчанию: False)
END_OF_DOCUMENT_MARKER
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]
        }
    ]
}
Тип возвращаемого значения

Dict[str, Any]

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) и за ним следует обратное распространение, градиенты для параметров, которые не получили градиент, гарантированно будут 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.Rprop.html

Spec-Zone.ru

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