一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

人工智能編程:如何為神經(jīng)網(wǎng)絡(luò)每一層設(shè)置不同的梯度下降學(xué)習(xí)率?

 暖帶未來街QAZ 2020-04-07

專欄推薦

正文

import torch

from torch import nn

from torch import optim

class Net(nn.Module):

def __init__(self):

super(Net,self).__init__()

self.features=nn.Sequential(

nn.Conv2d(3,6,5),

nn.ReLU(True),

nn.MaxPool2d(2,2),

nn.Conv2d(6,16,5),

nn.ReLU(),

nn.MaxPool2d(2,2)

)

self.classifier=nn.Sequential(

nn.Linear(16*5*5,120),

nn.ReLU(),

nn.Linear(120,84),

nn.ReLU(),

nn.Linear(84,10)

)

def forward(self,x):

x=self.features(x)

x=x.view(x.shape[0],-1)

x=self.classifier(x)

return x

現(xiàn)在有一個(gè)如上所示的神經(jīng)網(wǎng)絡(luò),我們對其進(jìn)行實(shí)例化net=Net()

#定義一個(gè)優(yōu)化器,優(yōu)化方法為SGD

#優(yōu)化的參數(shù)是net.parameters()也就是所有的參數(shù)

#對這些所有的參數(shù)的優(yōu)化的學(xué)習(xí)率為1

optimizer=optim.SGD(params=net.parameters(),lr=1)

#print(optimizer)

#SGD (

#Parameter Group 0

# dampening: 0

# lr: 1

# momentum: 0

# nesterov: False

# weight_decay: 0

#)

optimizer.zero_grad()#梯度清零,還可以使用net.zero_grad()完成梯度清零操作

input=torch.randn(1,3,32,32)#創(chuàng)造一個(gè)樣本batch-size為1,通道為3,大小為32×32

out=net(input)

#print(input.size())torch.Size([1, 3, 32, 32])

為不同的子網(wǎng)絡(luò)設(shè)置不同的學(xué)習(xí)率

使用SGD的優(yōu)化方式

對features的優(yōu)化學(xué)習(xí)率為1e-5

對classifier的優(yōu)化學(xué)習(xí)率為1e-2

這樣就實(shí)現(xiàn)了對不同子網(wǎng)絡(luò)的優(yōu)化

optimizer=optim.SGD([

{'params':net.features.parameters()},

{'params':net.classifier.parameters(),'lr':1e-4}

],lr=1e-5)

#print(optimizer)

#SGD (

#Parameter Group 0

# dampening: 0

# lr: 1e-05

# momentum: 0

# nesterov: False

# weight_decay: 0

#Parameter Group 1

# dampening: 0

# lr: 0.01

# momentum: 0

# nesterov: False

# weight_decay: 0

#)

每有一個(gè)params參數(shù)就有一個(gè)Group組

手動(dòng)調(diào)整學(xué)習(xí)率

for param_group in optimizer.param_groups:

param_group['lr']*=0.1

人工智能編程:如何為神經(jīng)網(wǎng)絡(luò)每一層設(shè)置不同的梯度下降學(xué)習(xí)率?
人工智能編程:如何為神經(jīng)網(wǎng)絡(luò)每一層設(shè)置不同的梯度下降學(xué)習(xí)率?
人工智能編程:如何為神經(jīng)網(wǎng)絡(luò)每一層設(shè)置不同的梯度下降學(xué)習(xí)率?
人工智能編程:如何為神經(jīng)網(wǎng)絡(luò)每一層設(shè)置不同的梯度下降學(xué)習(xí)率?
人工智能編程:如何為神經(jīng)網(wǎng)絡(luò)每一層設(shè)置不同的梯度下降學(xué)習(xí)率?

學(xué)習(xí)率衰減

對于一階梯度進(jìn)行優(yōu)化的方法而言,開始的時(shí)候更新的幅度是比較大的,也就是說剛開始進(jìn)行梯度下降的時(shí)候可以將學(xué)習(xí)率設(shè)置的大一些,但是訓(xùn)練集的loss下降到一定的程度之后,使用這個(gè)太大的學(xué)習(xí)率就會(huì)導(dǎo)致loss一直來回震蕩。那么此時(shí)我們就可以進(jìn)行學(xué)習(xí)率的衰減,在深度學(xué)習(xí)框架pytorch中可以使用torch.optim.lr_scheduler來完成。

訪問參數(shù)組

optimizer.param_groups所有的參數(shù)組

optimizer.param_groups[0]獲取到第一個(gè)參數(shù)組

optimizer.param_groups[0]['lr']獲取第一個(gè)參數(shù)組的lr,也就是學(xué)習(xí)率

optimizer.param_groups[0]['weight_decay']獲取第一個(gè)參數(shù)數(shù)組的weight,這個(gè)是正則化參數(shù)λ

既然可以獲取到,那么我們就可以通過修改這個(gè)屬性來改變訓(xùn)練過程中的學(xué)習(xí)率

optimizer.param_groups[0]['lr']=1e-5

為了防止有多個(gè)參數(shù)組,我們可以遍歷所有的參數(shù)組,然后設(shè)置學(xué)習(xí)率

for param_group in optimizer.param_groups:

param_group['lr']=1e-5

這樣就給所有的參數(shù)組設(shè)置學(xué)習(xí)率了

我們可以將其封裝成一個(gè)方法來使用

def set_learning_rate(optimizer,lr):

for param_grop in optimizer.param_groups:

param_group['lr']=lr

具體使用的時(shí)候,我們可以根據(jù)epoch的次數(shù)來設(shè)置,如下所示當(dāng)epoch為20次的時(shí)候就可以調(diào)整學(xué)習(xí)率了。

if epoch==20:

set_learning_rate(optimizer,0.01)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    青青操日老女人的穴穴| 中文字幕日韩一区二区不卡 | 九九九热视频最新在线| 亚洲国产精品久久综合网| 毛片在线观看免费日韩| 大香蕉大香蕉手机在线视频| 欧美日韩综合在线第一页| 亚洲国产中文字幕在线观看| 熟女乱一区二区三区丝袜| 护士又紧又深又湿又爽的视频| 日韩1区二区三区麻豆| 少妇熟女亚洲色图av天堂| 91日韩欧美在线视频| 国产欧美日产久久婷婷| 日本午夜免费福利视频 | 99久只有精品免费视频播放| 日韩欧美91在线视频| 深夜福利亚洲高清性感| 日韩人妻毛片中文字幕| 国产毛片av一区二区三区小说| 两性色午夜天堂免费视频| 国产又猛又大又长又粗| 亚洲国产一区精品一区二区三区色| 丰满人妻一二区二区三区av| 麻豆在线观看一区二区| 少妇淫真视频一区二区| 欧美一级日韩中文字幕| 91精品国产综合久久精品| 91精品国产av一区二区| 亚洲欧美日韩网友自拍| 粉嫩国产美女国产av| 精产国品一二三区麻豆| 国产老熟女超碰一区二区三区| 日本在线高清精品人妻| 国产精品久久熟女吞精| 深夜福利亚洲高清性感| 91久久精品中文内射| 伊人色综合久久伊人婷婷| 国产又大又黄又粗又免费| 国产一区二区不卡在线播放 | 国产成人午夜在线视频|