本文參考PyTorch官網(wǎng)的教程,分為五個(gè)基本模塊來介紹PyTorch。為了避免文章過長(zhǎng),這五個(gè)模塊分別在五篇博文中介紹。
Part1:PyTorch簡(jiǎn)單知識(shí)
Part2:PyTorch的自動(dòng)梯度計(jì)算
Part3:使用PyTorch構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)
Part4:訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)分類器
Part5:數(shù)據(jù)并行化
本文是關(guān)于Part2的內(nèi)容。
Part2:PyTorch的自動(dòng)梯度計(jì)算
autograd package是PyTorch中所有神經(jīng)網(wǎng)絡(luò)的核心。先了解一些基本知識(shí),然后開始訓(xùn)練第一個(gè)神經(jīng)網(wǎng)絡(luò)。autograd package提供了Tensors上所有運(yùn)算的自動(dòng)求導(dǎo)功能。它是一個(gè)按運(yùn)行定義(define-by-run)的框架,這意味著反向傳播是依據(jù)代碼運(yùn)行情況而定義的,并且每一個(gè)單次迭代都可能不相同。
1 變量(Variable)
autograd.Variable 是這個(gè)package的中心類。它打包了一個(gè)Tensor,并且支持幾乎所有運(yùn)算。一旦你完成了你的計(jì)算,可以調(diào)用.backward(),所有梯度就可以自動(dòng)計(jì)算。
你可以使用.data屬性來訪問原始tensor。相對(duì)于變量的梯度值可以被積累到.grad中。
這里還有一個(gè)類對(duì)于自動(dòng)梯度的執(zhí)行是很重要的:Function(函數(shù))
變量和函數(shù)是相互關(guān)聯(lián)的,并且建立一個(gè)非循環(huán)圖。每一個(gè)變量有一個(gè).grad_fn屬性,它可以引用一個(gè)創(chuàng)建了變量的函數(shù)(除了那些用戶創(chuàng)建的變量——他們的grad_fn是空的)。
如果想要計(jì)算導(dǎo)數(shù),可以調(diào)用Variable上的.backward()。如果變量是標(biāo)量(只有一個(gè)元素),你不需要為backward()確定任何參數(shù)。但是,如果它有多個(gè)元素,你需要確定grad_output參數(shù)(這是一個(gè)具有匹配形狀的tensor)。
import torch from torch.autograd import Variable
創(chuàng)建一個(gè)變量:
x = Variable(torch.ones(2, 2), requires_grad=True) print(x)
對(duì)變量做一個(gè)運(yùn)算:
y = x + 2 print(y)
y作為一個(gè)運(yùn)算的結(jié)果被創(chuàng)建,所以它有g(shù)rad_fn。
print(y.grad_fn)
在y上做更多的運(yùn)算:
z = y * y * 3 out = z.mean() print(z, out)
2 梯度(Gradients)
現(xiàn)在來做反向傳播。out.backward()等價(jià)于out.backward(torch.Tensor([1.0]))。
out.backward()
打印梯度 d(out)/dx
print(x.grad)
你應(yīng)該會(huì)得到一個(gè)元素為4.5的矩陣。
你可以使用autograd做很多瘋狂的事情。
x = torch.randn(3) x = Variable(x, requires_grad=True) y = x * 2 while y.data.norm() < 1000: y = y * 2 print(y)
gradients = torch.FloatTensor([0.1, 1.0, 0.0001])
y.backward(gradients)
print(x.grad)
責(zé)任編輯:xj
-
神經(jīng)網(wǎng)絡(luò)
+關(guān)注
關(guān)注
42文章
4771瀏覽量
100777 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5503瀏覽量
121175 -
pytorch
+關(guān)注
關(guān)注
2文章
808瀏覽量
13229
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論