快捷方式

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, optional) – 學習率(預設值:1)

  • max_iter (int, optional) – 每個最佳化步驟的最大迭代次數(預設值:20)

  • max_eval (int, optional) – 每個最佳化步驟的最大函式評估次數(預設值:max_iter * 1.25)。

  • tolerance_grad (float, optional) – 一階最優性的終止容差(預設值:1e-7)。

  • tolerance_change (float, optional) – 函式值/引數變化的終止容差(預設值:1e-9)。

  • history_size (int, optional) – 更新歷史大小(預設值:100)。

  • line_search_fn (str, optional) – 可以是 ‘strong_wolfe’ 或 None(預設值:None)。

add_param_group(param_group)[source]

Optimizerparam_groups 新增一個引數組。

這在微調預訓練網路時非常有用,因為可以使凍結的層可訓練,並在訓練過程中新增到 Optimizer 中。

引數

param_group (dict) – 指定應最佳化哪些 Tensor 以及組特定的最佳化選項。

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,則最佳化器的 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 呼叫。註冊的鉤子可用於在 load_state_dict 載入 state_dict 後執行後處理。

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

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

返回

一個控制代碼,可以透過呼叫 handle.remove() 來移除新增的鉤子

返回型別

torch.utils.hooks.RemoveableHandle

register_load_state_dict_pre_hook(hook, prepend=False)[source]

註冊一個 load_state_dict 前置鉤子,該鉤子將在呼叫 load_state_dict() 前被呼叫。其簽名應如下所示

hook(optimizer, state_dict) -> state_dict or None

引數 optimizer 是正在使用的最佳化器例項,引數 state_dict 是使用者傳遞給 load_state_dictstate_dict 的淺複製。該鉤子可以原地修改 state_dict,也可以選擇返回一個新的 state_dict。如果返回了一個 state_dict,它將被用於載入到最佳化器中。

該鉤子將在對 self 呼叫 load_state_dict 前使用引數 selfstate_dict 呼叫。註冊的鉤子可用於在呼叫 load_state_dict 之前執行預處理。

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

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

返回

一個控制代碼,可以透過呼叫 handle.remove() 來移除新增的鉤子

返回型別

torch.utils.hooks.RemoveableHandle

register_state_dict_post_hook(hook, prepend=False)[source]

註冊一個 state dict 後置鉤子,該鉤子將在呼叫 state_dict() 後被呼叫。

其簽名應如下所示

hook(optimizer, state_dict) -> state_dict or None

該鉤子將在對 self 生成一個 state_dict 後使用引數 selfstate_dict 呼叫。該鉤子可以原地修改 state_dict,也可以選擇返回一個新的 state_dict。註冊的鉤子可用於在 state_dict 返回之前對其執行後處理。

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

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

返回

一個控制代碼,可以透過呼叫 handle.remove() 來移除新增的鉤子

返回型別

torch.utils.hooks.RemoveableHandle

register_state_dict_pre_hook(hook, prepend=False)[source]

註冊一個 state dict 前置鉤子,該鉤子將在呼叫 state_dict() 前被呼叫。

其簽名應如下所示

hook(optimizer) -> None

引數 optimizer 是正在使用的最佳化器例項。該鉤子將在對 self 呼叫 state_dict 前使用引數 self 呼叫。註冊的鉤子可用於在呼叫 state_dict 之前執行預處理。

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

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

返回

一個控制代碼,可以透過呼叫 handle.remove() 來移除新增的鉤子

返回型別

torch.utils.hooks.RemoveableHandle

register_step_post_hook(hook)[source]

註冊一個最佳化器步進後置鉤子,該鉤子將在最佳化器步進後被呼叫。

其簽名應如下所示

hook(optimizer, args, kwargs) -> None

引數 optimizer 是正在使用的最佳化器例項。

引數

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

返回

一個控制代碼,可以透過呼叫 handle.remove() 來移除新增的鉤子

返回型別

torch.utils.hooks.RemovableHandle

register_step_pre_hook(hook)[source]

註冊一個最佳化器步進前置鉤子,該鉤子將在最佳化器步進前被呼叫。

其簽名應如下所示

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

dict 形式返回最佳化器狀態。

它包含兩個條目

  • state: 一個 Dict,包含當前的最佳化狀態。其內容

    在不同的最佳化器類之間有所不同,但具有一些共同特徵。例如,狀態按引數儲存,而引數本身不儲存。state 是一個字典,將引數 ID 對映到包含每個引數對應狀態的 Dict。

  • param_groups: 一個 List,包含所有引數組,其中每個

    引數組都是一個 Dict。每個引數組包含最佳化器特定的元資料,例如學習率和權重衰減,以及組中引數的引數 ID 列表。如果引數組使用 named_parameters() 初始化,則名稱內容也會儲存在狀態字典中。

注意:引數 ID 可能看起來像索引,但它們只是將狀態與引數組關聯的 ID。從 state_dict 載入時,最佳化器將壓縮引數組的 params(int ID)和最佳化器的 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]
            '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)[source][source]

執行單個最佳化步驟。

引數

closure (Callable) – 一個閉包,用於重新評估模型並返回損失。

zero_grad(set_to_none=True)[source]

重置所有最佳化過的 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 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源