真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

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

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

成都創(chuàng)新互聯(lián)專注于潘集網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供潘集營銷型網(wǎng)站建設(shè),潘集網(wǎng)站制作、潘集網(wǎng)頁設(shè)計、潘集網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造潘集網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供潘集網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

PyTorch的主要功能和特點之一就是backword函數(shù),我知道一些基本的導(dǎo)數(shù):

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

讓我們在PyTorch中實現(xiàn):

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

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

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

RuntimeError: grad can be implicitly created only for scalar outputs

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

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

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

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

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

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

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

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

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

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

但是,當(dāng)輸出張量是非標(biāo)量時,我們需要傳遞外部梯度向量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......

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

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

從上面的計算圖中,我們發(fā)現(xiàn)張量A和B是葉節(jié)點。我們可以用is_leaf來驗證:

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

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

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

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

感謝各位的閱讀,以上就是“Pytorch中的.backward()方法怎么用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Pytorch中的.backward()方法怎么用這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!


網(wǎng)站題目:Pytorch中的.backward()方法怎么用
本文地址:http://weahome.cn/article/gdoeop.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部