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