快捷方式

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][source]

實作 L-BFGS 演算法。

深受 minFunc 的啟發。

警告

此最佳化器不支援個別參數選項和參數群組 (只能有一個)。

警告

目前,所有參數都必須位於單一裝置上。未來將會改進這一點。

注意

這是一個非常消耗記憶體的最佳化器 (它需要額外的 param_bytes * (history_size + 1) 位元組)。如果記憶體不足,請嘗試減少歷史記錄大小,或使用不同的演算法。

參數
  • params (iterable) – 要最佳化的參數的可迭代物件。參數必須是實數。

  • 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)[source]

將參數群組新增至 Optimizerparam_groups

當對預先訓練的網路進行微調時,這非常有用,因為可以將凍結的層設為可訓練,並在訓練過程中新增至 Optimizer

參數

param_group (dict) – 指定應最佳化的張量以及群組特定的最佳化選項。

load_state_dict(state_dict)[source]

載入最佳化器狀態。

參數

state_dict (dict) – 最佳化器狀態。應該是從呼叫 state_dict() 傳回的物件。

注意

參數的名稱(如果在 state_dict() 中每個參數群組的 “param_names” 鍵下存在)不會影響載入過程。若要將參數的名稱用於自定義案例(例如,當載入的狀態字典中的參數與最佳化器中初始化的參數不同時),應實作自定義 register_load_state_dict_pre_hook 以相應地調整載入的字典。如果載入的狀態字典 param_groups 中存在 param_names,則它們將被儲存並覆寫最佳化器狀態中當前的名稱(如果存在)。如果它們在載入的狀態字典中不存在,則最佳化器的 param_names 將保持不變。

register_load_state_dict_post_hook(hook, prepend=False)[source]

註冊一個 load_state_dict 後置鉤子,它將在呼叫 load_state_dict() 之後呼叫。它應該具有以下簽章

hook(optimizer) -> None

optimizer 參數是正在使用的最佳化器實例。

self 上呼叫 load_state_dict 之後,將會使用參數 self 呼叫此 hook。註冊的 hook 可用於在 load_state_dict 載入 state_dict 之後執行後處理。

參數
  • hook (Callable) – 要註冊的使用者定義 hook。

  • prepend (bool) – 如果為 True,則提供的 post hook 將在 load_state_dict 上所有已註冊的 post-hook 之前觸發。否則,提供的 hook 將在所有已註冊的 post-hook 之後觸發。(預設值:False)

回傳

一個 handle,可用於透過呼叫 handle.remove() 來移除新增的 hook。

回傳類型

torch.utils.hooks.RemoveableHandle

register_load_state_dict_pre_hook(hook, prepend=False)[source]

註冊一個 load_state_dict pre-hook,它會在呼叫 load_state_dict() 之前被呼叫。它應該具有以下簽章:

hook(optimizer, state_dict) -> state_dict or None

optimizer 參數是正在使用的優化器實例,而 state_dict 參數是使用者傳遞給 load_state_dictstate_dict 的淺拷貝。Hook 可以就地修改 state_dict,或者選擇性地回傳一個新的 state_dict。如果回傳 state_dict,它將被用於載入到優化器中。

self 上呼叫 load_state_dict 之前,將會使用參數 selfstate_dict 呼叫此 hook。註冊的 hook 可用於在呼叫 load_state_dict 之前執行預處理。

參數
  • hook (Callable) – 要註冊的使用者定義 hook。

  • prepend (bool) – 如果為 True,則提供的 pre hook 將在 load_state_dict 上所有已註冊的 pre-hook 之前觸發。否則,提供的 hook 將在所有已註冊的 pre-hook 之後觸發。(預設值:False)

回傳

一個 handle,可用於透過呼叫 handle.remove() 來移除新增的 hook。

回傳類型

torch.utils.hooks.RemoveableHandle

register_state_dict_post_hook(hook, prepend=False)[source]

註冊一個 state dict post-hook,它會在呼叫 state_dict() 之後被呼叫。

它應該具有以下簽章:

hook(optimizer, state_dict) -> state_dict or None

self 上產生 state_dict 之後,將會使用參數 selfstate_dict 呼叫此 hook。Hook 可以就地修改 state_dict,或者選擇性地回傳一個新的 state_dict。註冊的 hook 可用於在回傳 state_dict 之前對其執行後處理。

參數
  • hook (Callable) – 要註冊的使用者定義 hook。

  • prepend (bool) – 如果為 True,則提供的 post hook 將在 state_dict 上所有已註冊的 post-hook 之前觸發。否則,提供的 hook 將在所有已註冊的 post-hook 之後觸發。(預設值:False)

回傳

一個 handle,可用於透過呼叫 handle.remove() 來移除新增的 hook。

回傳類型

torch.utils.hooks.RemoveableHandle

register_state_dict_pre_hook(hook, prepend=False)[source]

註冊一個 state dict pre-hook,它會在呼叫 state_dict() 之前被呼叫。

它應該具有以下簽章:

hook(optimizer) -> None

optimizer 參數是正在使用的優化器實例。在 self 上呼叫 state_dict 之前,將會使用參數 self 呼叫此 hook。註冊的 hook 可用於在呼叫 state_dict 之前執行預處理。

參數
  • hook (Callable) – 要註冊的使用者定義 hook。

  • prepend (bool) – 如果為 True,則提供的 pre hook 將在 state_dict 上所有已註冊的 pre-hook 之前觸發。否則,提供的 hook 將在所有已註冊的 pre-hook 之後觸發。(預設值:False)

回傳

一個 handle,可用於透過呼叫 handle.remove() 來移除新增的 hook。

回傳類型

torch.utils.hooks.RemoveableHandle

register_step_post_hook(hook)[source]

註冊一個優化器 step post hook,它會在優化器 step 之後被呼叫。

它應該具有以下簽章:

hook(optimizer, args, kwargs) -> None

optimizer 參數是正在使用的最佳化器實例。

參數

hook (Callable) – 要註冊的使用者定義 hook。

回傳

一個 handle,可用於透過呼叫 handle.remove() 來移除新增的 hook。

回傳類型

torch.utils.hooks.RemovableHandle

register_step_pre_hook(hook)[source]

註冊一個優化器 step pre hook,它會在優化器 step 之前被呼叫。

它應該具有以下簽章:

hook(optimizer, args, kwargs) -> None or modified args and kwargs

optimizer 參數是被使用的優化器實例。如果 args 和 kwargs 被 pre-hook 修改,則轉換後的值會以包含 new_args 和 new_kwargs 的元組形式返回。

參數

hook (Callable) – 要註冊的使用者定義 hook。

回傳

一個 handle,可用於透過呼叫 handle.remove() 來移除新增的 hook。

回傳類型

torch.utils.hooks.RemovableHandle

state_dict()[原始碼]

將優化器的狀態作為 dict 返回。

它包含兩個條目

  • state:一個包含當前優化狀態的字典。其內容

    因優化器類別而異,但一些常見的特徵適用。例如,狀態是按參數儲存的,並且參數本身不會被儲存。state 是一個將參數 ID 映射到字典的字典,該字典包含與每個參數相對應的狀態。

  • param_groups:一個包含所有參數組的列表,其中每個

    參數組是一個字典。每個參數組都包含特定於優化器的元數據,例如學習率和權重衰減,以及組中參數的參數 ID 列表。如果參數組使用 named_parameters() 初始化,則名稱內容也將儲存在 state dict 中。

注意:參數 ID 可能看起來像索引,但它們只是將狀態與 param_group 關聯的 ID。從 state_dict 加載時,優化器會將 param_group 的 params (int IDs) 和優化器的 param_groups (實際的 nn.Parameter s) 壓縮在一起,以便在沒有額外驗證的情況下匹配狀態。

返回的 state dict 可能看起來像這樣

{
    '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]
            'param_names' ['param0']  (optional)
        },
        {
            'lr': 0.001,
            'weight_decay': 0.5,
            ...
            'params': [1, 2, 3]
            'param_names': ['param1', 'layer.weight', 'layer.bias'] (optional)
        }
    ]
}
回傳類型

Dict[str, Any]

step(closure)[原始碼][原始碼]

執行單個優化步驟。

參數

closure (Callable) – 一個重新評估模型並返回損失的 closure。

zero_grad(set_to_none=True)[原始碼]

重置所有優化過的 torch.Tensor 的梯度。

參數

set_to_none (bool) – 不是設定為零,而是將梯度設定為 None。通常,這會減少記憶體佔用,並且可以適度提高效能。但是,它會改變某些行為。例如:1. 當使用者嘗試訪問梯度並對其執行手動操作時,None 屬性或充滿 0 的 Tensor 的行為會有所不同。2. 如果使用者請求 zero_grad(set_to_none=True),然後進行反向傳播,則保證未收到梯度的參數的 .grad 為 None。3. 如果梯度為 0 或 None,torch.optim 優化器的行為會有所不同(在其中一種情況下,它以梯度 0 執行該步驟,而在另一種情況下,它完全跳過該步驟)。

文件

訪問 PyTorch 的完整開發者文檔

檢視文檔

教學

取得適用於初學者和進階開發者的深入教學

檢視教學

資源

尋找開發資源並獲得問題解答

檢視資源