PyTorch入門學(xué)習(xí)(二):Autogard之自動求梯度

未經(jīng)允許,不得轉(zhuǎn)載七扰,謝謝~~

autograd包是PyTorch中神經(jīng)網(wǎng)絡(luò)的核心部分,簡單學(xué)習(xí)一下.

autograd提供了所有張量操作的自動求微分功能. 它的靈活性體現(xiàn)在可以通過代碼的運行來決定反向傳播的過程, 這樣就使得每一次的迭代都可以是不一樣的.

Variable類

  • autograd.Variable是這個包中的核心類.
  • 它封裝了Tensor,并且支持了幾乎所有Tensor的操作.
  • 一旦你完成張量計算之后就可以調(diào)用.backward()函數(shù),它會幫你把所有的梯度計算好.
  • 通過Variable的.data屬性可以獲取到張量.
  • 通過Variabe的.grad屬性可以獲取到梯度.

下圖是Variable的結(jié)構(gòu)圖:


Function類

  • 對于實現(xiàn)自動求梯度還有一個很重要的類就是autograd.Function.
  • VariableFunction一起構(gòu)建了非循環(huán)圖,完成了前向傳播的計算.
  • 每個通過Function函數(shù)計算得到的變量都有一個.grad_fn屬性.
  • 用戶自己定義的變量(不是通過函數(shù)計算得到的)的.grad_fn值為空.
  • 如果想計算某個變量的梯度,可以調(diào)用.backward()函數(shù):
    1.當(dāng)變量是標(biāo)量的時候不需要指定任何參數(shù).
    2.當(dāng)變量不是標(biāo)量的時候,需要指定一個跟該變量同樣大小的張量grad_output用來存放計算好的梯度.

代碼示例

  • import packet
import torch
from torch.autograd import Variable
  • Create a variable
x=Variable(torch.ones(2,2),requires_grad=True)
print (x)
  • Do an operation of variable
y=x+2
print(y)
  • grad_fn attribute
    這里的x是屬于用戶自己定義的,而y屬于函數(shù)產(chǎn)生的,所以y有g(shù)rad_fn屬性,而x沒有.
print (x.grad_fn)
print (y.grad_fn)
  • more operations on y
z = y * y * 3
out = z.mean()
print(z, out)

Gradients

如果你跟著上面的代碼做下來的話,上面已經(jīng)完成了變量x及計算函數(shù)的定義.
現(xiàn)在我們就可以用backward()自動求導(dǎo)啦.

out.backward()
print(x.grad)

反向計算得到的梯度如下所示:


  • 這里的out為標(biāo)量,所以直接調(diào)用backward()函數(shù)即可.
  • 一定要注意當(dāng)out為數(shù)組時,用先定義一樣大小的Tensor例如grad_output執(zhí)行.backgrad(grad_output)語句.

以上就基本完成了前向傳播建立計算圖以及反向傳播求梯度的過程.

more

關(guān)于 Variable and Function 更詳細的參考資料:
http://pytorch.org/docs/autograd

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末奢赂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子戳寸,更是在濱河造成了極大的恐慌呈驶,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件疫鹊,死亡現(xiàn)場離奇詭異袖瞻,居然都是意外死亡,警方通過查閱死者的電腦和手機拆吆,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進店門聋迎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枣耀,你說我怎么就攤上這事霉晕。” “怎么了捞奕?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵牺堰,是天一觀的道長。 經(jīng)常有香客問我颅围,道長伟葫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任院促,我火速辦了婚禮筏养,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘常拓。我一直安慰自己渐溶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布弄抬。 她就那樣靜靜地躺著茎辐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪掂恕。 梳的紋絲不亂的頭發(fā)上拖陆,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天,我揣著相機與錄音竹海,去河邊找鬼慕蔚。 笑死,一個胖子當(dāng)著我的面吹牛斋配,可吹牛的內(nèi)容都是我干的孔飒。 我是一名探鬼主播灌闺,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼坏瞄!你這毒婦竟也來了桂对?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鸠匀,失蹤者是張志新(化名)和其女友劉穎蕉斜,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缀棍,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡宅此,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了爬范。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片父腕。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖青瀑,靈堂內(nèi)的尸體忽然破棺而出璧亮,到底是詐尸還是另有隱情,我是刑警寧澤斥难,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布枝嘶,位于F島的核電站,受9級特大地震影響哑诊,放射性物質(zhì)發(fā)生泄漏群扶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一搭儒、第九天 我趴在偏房一處隱蔽的房頂上張望穷当。 院中可真熱鬧提茁,春花似錦淹禾、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至峭火,卻和暖如春毁习,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卖丸。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工纺且, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人稍浆。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓载碌,卻偏偏與公主長得像猜嘱,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嫁艇,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

推薦閱讀更多精彩內(nèi)容