PyTorch 基礎(chǔ)(2) 自動(dòng)求導(dǎo)

使用autograd來自動(dòng)求導(dǎo)

在機(jī)器學(xué)習(xí)中闹司,我們通常使用梯度下降來更新模型參數(shù)從而求解。損失函數(shù)關(guān)于模型參數(shù)的梯度指向一個(gè)可以降低損失函數(shù)值的方向灰嫉,我們不斷地沿著梯度的方向更新模型從而最小化損失函數(shù)扼倘。雖然梯度計(jì)算比較直觀,但對(duì)于復(fù)雜的模型需五,例如多達(dá)數(shù)十層的神經(jīng)網(wǎng)絡(luò)鹉动,手動(dòng)計(jì)算梯度非常困難。
PyTorch使用autograd程序包提供自動(dòng)求導(dǎo)宏邮。

Variable

autograd.Variable()是這個(gè)程序包的核心類泽示。封裝了一個(gè)Tensor和它上的所有運(yùn)算。一旦完成計(jì)算可以調(diào)用.backward()自動(dòng)計(jì)算所有梯度蜜氨。
屬性.data訪問tensor
屬性.grad變量的梯度

Variable

我們先導(dǎo)入autograd械筛。

import torch
form torch.autograd import Variable

創(chuàng)建一個(gè)變量:

x = Variable(torch.arange(1, 5).resize_(2, 2), requires_grad=True)
print(x)

Variable containing:
1 2
3 4
[torch.FloatTensor of size 2x2]

變量上運(yùn)算:

y = x * 2
z = y * x
print(z)

Variable containing:
2 8
18 32
[torch.FloatTensor of size 2x2]

接下來我們可以通過z.backward()來進(jìn)行求導(dǎo),這里z不是一個(gè)標(biāo)量飒炎,所以使用torch.sum(z).backward()

torch.sum(z).backward()
print(x.grad)

Variable containing:
4 8
12 16
[torch.FloatTensor of size 2x2]

對(duì)控制流求導(dǎo)

命令式的編程的一個(gè)便利之處是幾乎可以對(duì)任意的可導(dǎo)程序進(jìn)行求導(dǎo)埋哟,即使里面包含了Python的控制流±赏簦考慮下面程序赤赊,里面包含控制流for和if闯狱,但循環(huán)迭代的次數(shù)和判斷語句的執(zhí)行都是取決于輸入的值。不同的輸入會(huì)導(dǎo)致這個(gè)程序的執(zhí)行不一樣砍鸠。(對(duì)于計(jì)算圖框架來說扩氢,這個(gè)對(duì)應(yīng)于動(dòng)態(tài)圖,就是圖的結(jié)構(gòu)會(huì)根據(jù)輸入數(shù)據(jù)不同而改變)爷辱。

def f(a):
    b = a * 2
    while torch.norm(b.data) < 1000:
        b = b * 2
    if torch.sum(b.data) > 0:
        c = b
    else:
        c = 100 * b
    return c 

x = Variable(torch.randn(3), requires_grad=True)
c = f(x)
torch.sum(c).backward()
print(x.grad == c/x)

Variable containing:
1
1
1
[torch.ByteTensor of size 3]

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末录豺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子饭弓,更是在濱河造成了極大的恐慌双饥,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弟断,死亡現(xiàn)場(chǎng)離奇詭異咏花,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阀趴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門昏翰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人刘急,你說我怎么就攤上這事棚菊。” “怎么了叔汁?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵统求,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我据块,道長(zhǎng)码邻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任另假,我火速辦了婚禮像屋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘边篮。我一直安慰自己开睡,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布苟耻。 她就那樣靜靜地躺著,像睡著了一般扶檐。 火紅的嫁衣襯著肌膚如雪凶杖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天款筑,我揣著相機(jī)與錄音智蝠,去河邊找鬼腾么。 笑死,一個(gè)胖子當(dāng)著我的面吹牛杈湾,可吹牛的內(nèi)容都是我干的解虱。 我是一名探鬼主播,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼漆撞,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼殴泰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起浮驳,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤悍汛,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后至会,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體离咐,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年奉件,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了宵蛀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡县貌,死狀恐怖术陶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情窃这,我是刑警寧澤瞳别,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站杭攻,受9級(jí)特大地震影響祟敛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜兆解,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一馆铁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧锅睛,春花似錦埠巨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至印蔬,卻和暖如春勋桶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工例驹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留捐韩,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓鹃锈,卻偏偏與公主長(zhǎng)得像荤胁,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子屎债,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

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