下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第聊聊pytorch中Optimizer與optimizer.step()的用法{'params':model.base.parameters()},
{'params':model.classifier.parameters(),'lr':1e-3}
],lr=1e-2,momentum=0.9)
這意味著model.base的參數(shù)將會(huì)使用1e-2的學(xué)習(xí)率,model.classifier的參數(shù)將會(huì)使用1e-3的學(xué)習(xí)率,并且0.9的momentum將會(huì)被用于所有的參數(shù)。
進(jìn)行單次優(yōu)化
所有的optimizer都實(shí)現(xiàn)了step()方法,這個(gè)方法會(huì)更新所有的參數(shù)。它能按兩種方式來(lái)使用:
optimizer.step()
這是大多數(shù)optimizer所支持的簡(jiǎn)化版本。一旦梯度被如backward()之類的函數(shù)計(jì)算好后,我們就可以調(diào)用這個(gè)函數(shù)。
forinput,targetindataset:
optimizer.zero_grad()
output=model(input)
loss=loss_fn(output,target)
loss.backward()
optimizer.step()
optimizer.step(closure)
一些優(yōu)化算法例如ConjugateGradient和LBFGS需要重復(fù)多次計(jì)算函數(shù),因此你需要傳入一個(gè)閉包去允許它們重新計(jì)算你的模型。這個(gè)閉包應(yīng)當(dāng)清空梯度,計(jì)算損失,然后返回。
forinput,targetindataset:
defclosure():
optimizer.zero_grad()
output=model(input)
loss=loss_fn(output,target)
loss.backward()
returnloss
optimizer.step(closure)
補(bǔ)充:Pytorchoptimizer.step()和loss.backward()和scheduler.step()的關(guān)系與區(qū)別
首先需要明確optimzier優(yōu)化器的作用,形象地來(lái)說(shuō),優(yōu)化器就是需要根據(jù)網(wǎng)絡(luò)反向傳播的梯度信息來(lái)更新網(wǎng)絡(luò)的參數(shù),以起到降低loss函數(shù)計(jì)算值的作用,這也是機(jī)器學(xué)習(xí)里面最一般的方法論。
從優(yōu)化器的作用出發(fā),要使得優(yōu)化器能夠起作用,需要主要兩個(gè)東西:
1.優(yōu)化器需要知道當(dāng)前的網(wǎng)絡(luò)或者別的什么模型的參數(shù)空間
這也就是為什么在訓(xùn)練文件中,正式開始訓(xùn)練之前需要將網(wǎng)絡(luò)的參數(shù)放到優(yōu)化器里面,比如使用pytorch的話總會(huì)出現(xiàn)類似如下的代碼:
optimizer_G=Adam(model_G.parameters(),lr=train_c.lr_G)#lr使用的是初始lr
optimizer_D=Adam(model_D.parameters(),lr=train_c.lr_D)
2.需要知道反向傳播的梯度信息
我們還是從代碼入手,如下所示是Pytorch中SGD優(yōu)化算法的step()函數(shù)具體寫法,具體SGD的寫法放在參考部分。
defstep(self,closure=None):
"""Performsasingleoptimizationstep.
Arguments:
closure(callable,optional):Aclosurethatreevaluatesthemodel
andreturnstheloss.
loss=None
ifclosureisnotNone:
loss=closure()
forgroupinself.param_groups:
weight_decay=group['weight_decay']
momentum=group['momentum']
dampening=group['dampening']
nesterov=group['nesterov']
forpingroup['params']:
ifp.gradisNone:
continue
d_p=p.grad.data
ifweight_decay!=0:
d_p.add_(weight_decay,p.data)
ifmomentum!=0:
param_state=self.state[p]
if'momentum_buffer'notinparam_state:
buf=param_state['momentum_buffer']=d_p.clone()
else:
buf=param_state['momentum_buffer']
buf.mul_(momentum).add_(1-dampening,d_p)
ifnesterov:
d_p=d_p.add(momentum,buf)
else:
d_p=buf
p.data.add_(-group['lr'],d_p)
returnloss
從上面的代碼可以看到step這個(gè)函數(shù)使用的是參數(shù)空間(param_groups)中的grad,也就是當(dāng)前參數(shù)空間對(duì)應(yīng)的梯度,這也就解釋了為什么optimzier使用之前需要zero清零一下,因?yàn)槿绻磺辶?,那么使用的這個(gè)grad就得同上一個(gè)mini-batch有關(guān),這不是我們需要的結(jié)果。
再回過(guò)頭來(lái)看,我們知道optimizer更新參數(shù)空間需要基于反向梯度,因此,當(dāng)調(diào)用optimizer.step()的時(shí)候應(yīng)當(dāng)是loss.backward()的時(shí)候,這也就是經(jīng)常會(huì)碰到,如下情況
total_loss.backward()
optimizer_G.step()
loss.backward()在前,然后跟一個(gè)step。
那么為什么optimizer.step()需要放在每一個(gè)batch訓(xùn)練中,而不是epoch訓(xùn)練中,這是因?yàn)楝F(xiàn)在的mini-batch訓(xùn)練模式是假定每一個(gè)訓(xùn)練集就只有mini-batch這樣大,因此實(shí)際上可以將每一次mini-batch看做是一次訓(xùn)練,一次訓(xùn)練更新一次參數(shù)空間,因而optimizer.step()放在這里。
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年宣城郎溪縣人民醫(yī)院公開招聘勞務(wù)派遣人員2名筆試模擬試題及答案解析
- 2026中國(guó)安能科工管理技術(shù)崗位招聘考試備考題庫(kù)及答案解析
- 2026漢中腦安康復(fù)醫(yī)院見(jiàn)習(xí)崗位招聘考試備考試題及答案解析
- 2026貴州烏當(dāng)區(qū)水務(wù)管理局公益性崗位招聘1人考試備考試題及答案解析
- 2026云南昆明市昆華實(shí)驗(yàn)中招聘10人考試參考題庫(kù)及答案解析
- 2026天津市中天天杰招聘考試參考試題及答案解析
- 2026年1月南平武夷山職業(yè)學(xué)院人才招聘32人筆試參考題庫(kù)及答案解析
- 2026年常州機(jī)電職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試備考題庫(kù)帶答案解析
- 2026年赤大白鐵路工務(wù)段招聘?jìng)淇碱}庫(kù)及參考答案詳解1套
- 蘭州大學(xué)口腔醫(yī)院2026年招聘?jìng)淇碱}庫(kù)完整參考答案詳解
- 面板堆石壩面板滑模結(jié)構(gòu)設(shè)計(jì)
- 無(wú)人機(jī)裝調(diào)檢修工培訓(xùn)計(jì)劃及大綱
- 國(guó)家開放大學(xué)《森林保護(hù)》形考任務(wù)1-4參考答案
- GB 31604.1-2023食品安全國(guó)家標(biāo)準(zhǔn)食品接觸材料及制品遷移試驗(yàn)通則
- GB/T 3683-2023橡膠軟管及軟管組合件油基或水基流體適用的鋼絲編織增強(qiáng)液壓型規(guī)范
- 殯葬服務(wù)心得體會(huì) 殯儀館工作心得體會(huì)
- 電力線路維護(hù)檢修規(guī)程
- 春よ、來(lái)い(春天來(lái)了)高木綾子演奏長(zhǎng)笛曲譜鋼琴伴奏
- ARJ21機(jī)型理論知識(shí)考試題庫(kù)(匯總版)
- GB/T 4623-2014環(huán)形混凝土電桿
- GB/T 32065.4-2015海洋儀器環(huán)境試驗(yàn)方法第4部分:高溫試驗(yàn)
評(píng)論
0/150
提交評(píng)論