91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pytorch中的.backward()方法怎么用

發布時間:2021-07-12 15:36:11 來源:億速云 閱讀:349 作者:chen 欄目:大數據

這篇文章主要講解了“Pytorch中的.backward()方法怎么用”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Pytorch中的.backward()方法怎么用”吧!

PyTorch的主要功能和特點之一就是backword函數,我知道一些基本的導數:

Let, F = a*b
Where,
a = 10
b = 10?F/?a = b => ?F/?a = 20
?F/?b = a => ?F/?b = 10

讓我們在PyTorch中實現:

Pytorch中的.backward()方法怎么用

如果a和b是向量,那么下面的代碼似乎給出了一個錯誤:

Pytorch中的.backward()方法怎么用

RuntimeError: grad can be implicitly created only for scalar outputs

在文檔中寫道:當我們調用張量的反向函數時,如果張量是非標量(即它的數據有不止一個元素)并且要求梯度,那么這個函數還需要指定特定梯度。

這里F是非標量張量所以我們需要把梯度參數傳遞給和張量F維數相同的反向傳播函數

Pytorch中的.backward()方法怎么用

在上面的代碼示例中,將梯度參數傳遞給backword函數并給出了所需的梯度值a和b。但是,為什么我們必須將梯度參數傳遞給backword函數?

要理解這一點,我們需要了解.backward()函數是如何工作的。再次提到這些文檔:

torch.autograd是一個計算向量-雅可比積的引擎。即給定任意向量v,計算其乘積J@v.T注:@表示矩陣乘法

一般來說,雅可比矩陣是一個全偏導數的矩陣。如果我們考慮函數y它有n維的輸入向量x它有m維的輸出。然后計算包含以J表示的所有偏導數的雅可比矩陣:

Pytorch中的.backward()方法怎么用

v為backword函數提供的外梯度。另外,需要注意的另一件重要的事情是,默認情況下F.backward()與F.backward(gradient=torch.tensor([1.])相同,所以默認情況下,當輸出張量是標量時,我們不需要傳遞梯度參數,就像我們在第一個例子中所做的那樣。

當輸出張量為標量時,則v_vector的大小為1,即torch.tensor([1.]),可以用值1代替。這樣就得到了完整的雅可比矩陣,也就是J@v。T = J

但是,當輸出張量是非標量時,我們需要傳遞外部梯度向量v,得到的梯度計算雅可比向量積,即J@v.T

在這里,對于F = a*b在a = [10.0, 10.0] b =[20.0, 20.0]和v =[1]。1。我們得到?F/?a :

Pytorch中的.backward()方法怎么用

到目前為止,我們有:

Pytorch中的.backward()方法怎么用

我們引入一個新的變量G,它依賴于F

Pytorch中的.backward()方法怎么用

到目前為止都很好,但是讓我們檢查一下F的grad值也就是F.grad

Pytorch中的.backward()方法怎么用

我們得到None,并顯示了一個警告

The .grad attribute of a Tensor that is not a leaf Tensor is being accessed. Its .grad attribute won't be populated during autograd.backward(). If you indeed want the gradient for a non-leaf Tensor, use .retain_grad() on the non-leaf Tensor......

在前向傳播過程中,自動動態生成計算圖。對于上面的代碼示例,動態圖如下:

Pytorch中的.backward()方法怎么用

從上面的計算圖中,我們發現張量A和B是葉節點。我們可以用is_leaf來驗證:

Pytorch中的.backward()方法怎么用

Torch backward()僅在默認情況下累積葉子節點張量的梯度。因此,F grad沒有值,因為F張量不是葉子節點張量。為了積累非葉子節點的梯度,我們可以使用retain_grad方法如下:

Pytorch中的.backward()方法怎么用

在一般的情況下,我們的損失值張量是一個標量值,我們的權值參數是計算圖的葉子節點,所以我們不會得出上面討論的誤差條件。但是了解這些特殊的情況,這有助于了解更多關于pytorch的功能,萬一那天用上了呢,對吧。

感謝各位的閱讀,以上就是“Pytorch中的.backward()方法怎么用”的內容了,經過本文的學習后,相信大家對Pytorch中的.backward()方法怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

安吉县| 舟曲县| 珲春市| 武强县| 婺源县| 德州市| 乌兰察布市| 新巴尔虎右旗| 高邮市| 金平| 万盛区| 牡丹江市| 石林| 庆安县| 桑植县| 高尔夫| 义马市| 平陆县| 松江区| 东乌珠穆沁旗| 宝兴县| 古浪县| 武清区| 河间市| 柘荣县| 磐石市| 承德县| 区。| 揭西县| 平乐县| 辽源市| 香港| 泗水县| 萝北县| 育儿| 平塘县| 浦城县| 奉贤区| 阳新县| 五原县| 乐业县|