Pytorch 控制上下文區域性梯度更新

2021-10-02 11:42:00 字數 1186 閱讀 6010

在模型的evaluation階段和實際應用時,需要關閉pytorch自帶的自動求導autograd機制,以防止驗證/應用資料對網路引數的變動,同時減少自動求導帶來的運算和儲存消耗。

其常見的控制場景包括:

(1)禁止計算區域性梯度

(2)在禁止計算區域性梯度中,允許更精細的區域性梯度計算

(3)根據判斷條件,控制是否允許進行梯度更新

下面分別就上述三個場景,介紹常用的寫法。

場景一:禁止計算區域性梯度

pytorch提供了上下文管理器和裝飾器兩種方式進行控制。

# 方案一:上下文管理器

with torch.no_grad():

pass

# 方案二:裝飾器

@torch.no_grad(

)def

tensor_func()

:pass

場景二:在禁止計算區域性梯度中,允許更精細的區域性梯度計算

pytorch同樣提供了上下文管理器和裝飾器兩種方式進行控制。

# 方案一:上下文管理器

with torch.no_grad():

# 禁止區域性梯度

with torch.enable_grad():

# 允許區域性梯度

pass

# 方案二:裝飾器

@torch.no_grad(

)def

outer_tensor_func()

: @torch.enable_grad(

)def

inner_tensor_func()

:pass

場景三:根據判斷條件,控制是否允許進行梯度更新

pytorch提供了上下文管理器的方式進行控制。

"""

引數mode為乙個邏輯判斷句,若為true,則會允許區域性梯度;否則禁止

"""with torch.set_grad_enabled(mode)

:pass

其典型應用是將train階段和eval階段的計算過程統一寫在同乙個上下文管理器中,如:

with torch.set_grad_enabled(phase==

'train'):

pass

上下文 上下文棧

全域性 函式 區域性 在執行全域性 前將window確定為全域性執行上下文 對全域性資料進行預處理 var定義的全域性變數 undefined,新增為window的屬性 function宣告的全域性函式 賦值 fun 新增為window的方法 this 賦值 window 開始執行全域性 在呼叫函式...

中斷上下文 程序上下文

在學習與作業系統相關的知識時候,我們經常遇到程序上下文 中斷上下文,看似熟悉又感覺不是特別清晰。這裡我們從如下幾個方面進行描述。上下文是從英文中context翻譯過來的,指的是一種環境。上下文我們看起來不怎麼熟悉,但是我們可以看context的中文翻譯,或者我們能更加的情形些。context n 語...

全域性上下文與上下文

全域性上下文由main函式載入系統的主架構和主事件迴圈和全域性資料構成。是上帝創造世界時,建立的基礎事物。萬物之始,大道至簡,衍化至繁。全域性上下文代表著程式執行所需要的基礎資源。是程式執行的基礎。全域性上下文的特徵是在程式執行期間常駐記憶體。全域性上下文的生命週期和應用程式的生命週期相同。與應用程...