在pytorch中對非葉節(jié)點(diǎn)的變量計(jì)算梯度實(shí)例
在pytorch中一般只對葉節(jié)點(diǎn)進(jìn)行梯度計(jì)算,也就是下圖中的d,e節(jié)點(diǎn),而對非葉節(jié)點(diǎn),也即是c,b節(jié)點(diǎn)則沒有顯式地去保留其中間計(jì)算過程中的梯度(因?yàn)橐话銇碚f只有葉節(jié)點(diǎn)才需要去更新),這樣可以節(jié)省很大部分的顯存,但是在調(diào)試過程中,有時(shí)候我們需要對中間變量梯度進(jìn)行監(jiān)控,以確保網(wǎng)絡(luò)的有效性,這個(gè)時(shí)候我們需要打印出非葉節(jié)點(diǎn)的梯度,為了實(shí)現(xiàn)這個(gè)目的,我們可以通過兩種手段進(jìn)行。
注冊hook函數(shù)
Tensor.register_hook[2] 可以注冊一個(gè)反向梯度傳導(dǎo)時(shí)的hook函數(shù),這個(gè)hook函數(shù)將會在每次計(jì)算 關(guān)于該張量 的時(shí)候 被調(diào)用,經(jīng)常用于調(diào)試的時(shí)候打印出非葉節(jié)點(diǎn)梯度。當(dāng)然,通過這個(gè)手段,你也可以自定義某一層的梯度更新方法。[3] 具體到這里的打印非葉節(jié)點(diǎn)的梯度,代碼如:
def hook_y(grad): print(grad) x = Variable(torch.ones(2, 2), requires_grad=True) y = x + 2 z = y * y * 3 y.register_hook(hook_y) out = z.mean() out.backward()
輸出如:
tensor([[4.5000, 4.5000], [4.5000, 4.5000]])
retain_grad()
Tensor.retain_grad()顯式地保存非葉節(jié)點(diǎn)的梯度,當(dāng)然代價(jià)就是會增加顯存的消耗,而用hook函數(shù)的方法則是在反向計(jì)算時(shí)直接打印,因此不會增加顯存消耗,但是使用起來retain_grad()要比hook函數(shù)方便一些。代碼如:
x = Variable(torch.ones(2, 2), requires_grad=True) y = x + 2 y.retain_grad() z = y * y * 3 out = z.mean() out.backward() print(y.grad)
輸出如:
tensor([[4.5000, 4.5000], [4.5000, 4.5000]])
以上這篇在pytorch中對非葉節(jié)點(diǎn)的變量計(jì)算梯度實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python 類,property屬性(簡化屬性的操作),@property,property()用法示例
這篇文章主要介紹了Python 類,property屬性(簡化屬性的操作),@property,property()用法,結(jié)合實(shí)例形式分析了Python類的定義、屬性、方法及相關(guān)使用技巧,需要的朋友可以參考下2019-10-10python實(shí)現(xiàn)UDP協(xié)議下的文件傳輸
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)UDP協(xié)議下的文件傳輸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03PyTorch CNN實(shí)戰(zhàn)之MNIST手寫數(shù)字識別示例
本篇文章主要介紹了PyTorch CNN實(shí)戰(zhàn)之MNIST手寫數(shù)字識別示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-05-05Pyinstaller打包.py生成.exe的方法和報(bào)錯(cuò)總結(jié)
今天小編就為大家分享一篇關(guān)于Pyinstaller打包.py生成.exe的方法和報(bào)錯(cuò)總結(jié),小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04Python網(wǎng)頁解析利器BeautifulSoup安裝使用介紹
這篇文章主要介紹了Python網(wǎng)頁解析利器BeautifulSoup安裝使用介紹,本文用一個(gè)完整示例一步一步安裝了BeautifulSoup的安裝和使用過程,需要的朋友可以參考下2015-03-03Python實(shí)現(xiàn)點(diǎn)陣字體讀取與轉(zhuǎn)換的方法
今天小編就為大家分享一篇Python實(shí)現(xiàn)點(diǎn)陣字體讀取與轉(zhuǎn)換的方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01python+pyqt實(shí)現(xiàn)12306圖片驗(yàn)證效果
這篇文章主要為大家詳細(xì)介紹了python+pyqt實(shí)現(xiàn)12306圖片驗(yàn)證效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10