pytorch學習 反向傳播backward

2021-10-02 20:54:10 字數 1035 閱讀 7055

pytorch學習 – 反向傳播backward

backward函式屬於torch.autograd函式庫,在深度學習過程中對函式進行反向傳播,計算輸出變數關於輸入變數的梯度。其輸入變數自然應滿足autograd 的要求,為variable型別而不是tensor型別。

常見的使用方法為:

此時分為兩種情況,當y為標量時,對y進行反向傳播則不需要任何輸入變數,個人理解是即預設此時y為網路輸出的最後一層,其再沒有上一層變數關於其的梯度了(因為為標量)。當y為非標量variable型別時,根據pytorch中文官網的介紹,「backward的輸入引數是 此operation的輸出的值的梯度,backward的返回值是此operation輸入值的梯度。」,對於這句話,我個人的理解是因為輸出仍未非標量,所以其還在傳播過程中,pytorch需要知道該變數上一級關於其的梯度,我們不妨設上一級的變數為l,我們神經網路的鏈式法則為:

可見,最終x的梯度即又上面的公式得出,dl/dy即是我們需要給定的backward函式的輸入,dy/dx可由函式直接算出。

ok,舉個簡單的例子:

執行結果:

由提到的公式可以得到,

x.grads 為 dl/dy*dy/dx = [1,2,3,4,5]2x, 結果正如所料。

ps:1.關於求梯度,只有我們定義的variable的梯度會被放在 .grad 屬性中,其餘 variable 的梯度不會被儲存在 .grad 屬性中

2.自己定義variable的時候,記得variable(tensor, requires_grad = true),這樣才會被求梯度,不然的話,是不會求梯度的

可以參考

三 PyTorch 深度學習 反向傳播

import torch x data 1.0 2.0 3.0 y data 2.0 4.0 6.0 w torch.tensor 1.0 w的初值為1.0 w.requires grad true 需要計算梯度 defforward x return x w w是乙個tensor defloss ...

PyTorch深度學習實踐 反向傳播

pytorch深度學習實踐 完結合集 嗶哩嗶哩 bilibili 目錄在之前課程中介紹的線性模型就是乙個最簡單的神經網路的結構,其內部引數的更新過程如下 對於簡單的模型來說可以直接使用表示式的方式來更新權重,但是如果網路結構比較複雜 如下圖 直接使用解析式的方式來更新顯然有些複雜且不太可能實現。反向...

PyTorch深度學習實踐(四) 反向傳播

b站 pytorch深度學習實踐 反向傳播 1 tensor包含data 和 grad w.data w.grad.data 數值計算,不構建計算圖。w.grad.item 取出數值。w.grad.data.zero 清零 2 w是tensor型別,data和grad也是tensor型別,注意取值時...