您好,登錄后才能下訂單哦!
怎么分析PyTorch中的知識(shí)點(diǎn),相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
總結(jié):
按照慣例,所有屬性requires_grad=False的張量是葉子節(jié)點(diǎn)(即:葉子張量、 葉子節(jié)點(diǎn)張量). 對(duì)于屬性requires_grad=True的張量可能是葉子節(jié)點(diǎn)張量也可能不是葉 子節(jié)點(diǎn)張量而是中間節(jié)點(diǎn)(中間節(jié)點(diǎn)張量). 如果該張量的屬性requires_grad=True, 而且是用于直接創(chuàng)建的,也即它的屬性grad_fn=None,那么它就是葉子節(jié)點(diǎn). 如果該張量的屬性requires_grad=True,但是它不是用戶直接創(chuàng)建的,而是由其他張量 經(jīng)過(guò)某些運(yùn)算操作產(chǎn)生的,那么它就不是葉子張量,而是中間節(jié)點(diǎn)張量,并且它的屬性 grad_fn不是None,比如:grad_fn=<MeanBackward0>,這表示該張量是通過(guò)torch.mean() 運(yùn)算操作產(chǎn)生的,是中間結(jié)果,所以是中間節(jié)點(diǎn)張量,所以不是葉子節(jié)點(diǎn)張量. 判斷一個(gè)張量是不是葉子節(jié)點(diǎn),可以通過(guò)它的屬性is_leaf來(lái)查看. 一個(gè)張量的屬性requires_grad用來(lái)指示在反向傳播時(shí),是否需要為這個(gè)張量計(jì)算梯度. 如果這個(gè)張量的屬性requires_grad=False,那么就不需要為這個(gè)張量計(jì)算梯度,也就 不需要為這個(gè)張量進(jìn)行優(yōu)化學(xué)習(xí). 在PyTorch的運(yùn)算操作中,如果參加這個(gè)運(yùn)算操作的所有輸入張量的屬性requires_grad都 是False的話,那么這個(gè)運(yùn)算操作產(chǎn)生的結(jié)果,即輸出張量的屬性requires_grad也是False, 否則是True. 即輸入的張量只要有一個(gè)需要求梯度(屬性requires_grad=True),那么得到的 結(jié)果張量也是需要求梯度的(屬性requires_grad=True).只有當(dāng)所有的輸入張量都不需要求 梯度時(shí),得到的結(jié)果張量才會(huì)不需要求梯度. 對(duì)于屬性requires_grad=True的張量,在反向傳播時(shí),會(huì)為該張量計(jì)算梯度. 但是pytorch的 自動(dòng)梯度機(jī)制不會(huì)為中間結(jié)果保存梯度,即只會(huì)為葉子節(jié)點(diǎn)計(jì)算的梯度保存起來(lái),保存到該 葉子節(jié)點(diǎn)張量的屬性grad中,不會(huì)在中間節(jié)點(diǎn)張量的屬性grad中保存這個(gè)張量的梯度,這是 出于對(duì)效率的考慮,中間節(jié)點(diǎn)張量的屬性grad是None.如果用戶需要為中間節(jié)點(diǎn)保存梯度的 話,可以讓這個(gè)中間節(jié)點(diǎn)調(diào)用方法retain_grad(),這樣梯度就會(huì)保存在這個(gè)中間節(jié)點(diǎn)的grad屬性中.
看完上述內(nèi)容,你們掌握怎么分析PyTorch中的知識(shí)點(diǎn)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。