Pytorch實(shí)現(xiàn)將模型的所有參數(shù)的梯度清0
有兩種方式直接把模型的參數(shù)梯度設(shè)成0:
model.zero_grad()
optimizer.zero_grad()#當(dāng)optimizer=optim.Optimizer(model.parameters())時(shí),兩者等效
如果想要把某一Variable的梯度置為0,只需用以下語(yǔ)句:
Variable.grad.data.zero_()
補(bǔ)充知識(shí):PyTorch中在反向傳播前為什么要手動(dòng)將梯度清零?optimizer.zero_grad()的意義
optimizer.zero_grad()意思是把梯度置零,也就是把loss關(guān)于weight的導(dǎo)數(shù)變成0.
在學(xué)習(xí)pytorch的時(shí)候注意到,對(duì)于每個(gè)batch大都執(zhí)行了這樣的操作:
optimizer.zero_grad() ## 梯度清零
preds = model(inputs) ## inference
loss = criterion(preds, targets) ## 求解loss
loss.backward() ## 反向傳播求解梯度
optimizer.step() ## 更新權(quán)重參數(shù)
1、由于pytorch的動(dòng)態(tài)計(jì)算圖,當(dāng)我們使用loss.backward()和opimizer.step()進(jìn)行梯度下降更新參數(shù)的時(shí)候,梯度并不會(huì)自動(dòng)清零。并且這兩個(gè)操作是獨(dú)立操作。
2、backward():反向傳播求解梯度。
3、step():更新權(quán)重參數(shù)。
基于以上幾點(diǎn),正好說(shuō)明了pytorch的一個(gè)特點(diǎn)是每一步都是獨(dú)立功能的操作,因此也就有需要梯度清零的說(shuō)法,如若不顯示的進(jìn) optimizer.zero_grad()這一步操作,backward()的時(shí)候就會(huì)累加梯度。
以上這篇Pytorch實(shí)現(xiàn)將模型的所有參數(shù)的梯度清0就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法
這篇文章主要介紹了python使用xlrd實(shí)現(xiàn)檢索excel中某列含有指定字符串記錄的方法,涉及Python使用xlrd模塊檢索Excel的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-05-05
python執(zhí)行scp命令拷貝文件及文件夾到遠(yuǎn)程主機(jī)的目錄方法
今天小編就為大家分享一篇python執(zhí)行scp命令拷貝文件及文件夾到遠(yuǎn)程主機(jī)的目錄方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)抽樣解析
這篇文章主要介紹了python數(shù)據(jù)預(yù)處理 :數(shù)據(jù)抽樣解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
python通過(guò)scapy獲取局域網(wǎng)所有主機(jī)mac地址示例
這篇文章主要介紹了python通過(guò)scapy獲取局域網(wǎng)所有主機(jī)mac地址示例,需要的朋友可以參考下2014-05-05
Python中easy_install 和 pip 的安裝及使用
本篇文章主要介紹了Python中easy_install 和 pip 的安裝及使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

