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