一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如果項(xiàng)目的模型遇到瓶頸,用這些Tricks就對(duì)了

電子設(shè)計(jì) ? 來源:電子設(shè)計(jì) ? 作者:電子設(shè)計(jì) ? 2020-12-10 14:33 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

來源:AI人工智能初學(xué)者
作者:ChaucerG
其實(shí)圖像分類研究取得的大部分進(jìn)展都可以歸功于訓(xùn)練過程的改進(jìn),如數(shù)據(jù)增加和優(yōu)化方法的改變。但是,大多數(shù)改進(jìn)都沒有比較詳細(xì)的說明。因此作者在本文中測(cè)試實(shí)現(xiàn)了這些改進(jìn)的方法,并通過消融實(shí)驗(yàn)來評(píng)估這些Tricks對(duì)最終模型精度的影響。作者通過將這些改進(jìn)結(jié)合在一起,同時(shí)改進(jìn)了各種CNN模型。在ImageNet上將ResNet-50的Top-1驗(yàn)證精度從75.3%提高到79.29%。同時(shí)還將證明了提高圖像分類精度會(huì)在其他應(yīng)用領(lǐng)域(如目標(biāo)檢測(cè)和語義分割)也可以帶來更好的遷移學(xué)習(xí)性能。

1、Introduction

近年來ImageNet的榜單一直在被刷新,從2012年的AlexNet,再到VGG-Net、NiN、Inception、ResNet、DenseNet以及NASNet;Top-1精度也從62.5%(AlexNet)->82.7%(NASNet-A);但是這么大精度的提升也不完全是由模型的架構(gòu)改變所帶來的,其中 訓(xùn)練的過程也有會(huì)起到很大的作用,比如,損失函數(shù)的改進(jìn)、數(shù)據(jù)的預(yù)處理方式的改變、以及優(yōu)化方法的選擇等;但是這也是很容易被忽略的部分,因此這篇文章在這里也會(huì)著重討論這個(gè)問題。

2、Efficient Training

近年來硬件發(fā)展迅速,特別是GPU。因此,許多與性能相關(guān)的權(quán)衡的最佳選擇也會(huì)隨之發(fā)生變化。例如,在訓(xùn)練中使用較低的數(shù)值精度和較大的Batch/_Size更有效。
在本節(jié)中將在不犧牲模型精度的情況下實(shí)現(xiàn)低精度和大規(guī)模批量訓(xùn)練的各種技術(shù)。有些技術(shù)甚至可以提高準(zhǔn)確性和訓(xùn)練速度。

2.1、Large-batch training

Mini-Batch SGD將多個(gè)樣本分組到一個(gè)小批量中,以增加并行性,降低傳輸成本。然而,使用Large Batch-size可能會(huì)減慢訓(xùn)練進(jìn)度。對(duì)于凸優(yōu)化問題,收斂率隨著批量大小的增加而降低。類似的經(jīng)驗(yàn)結(jié)論已經(jīng)被發(fā)表。

換句話說,在相同的epoch數(shù)量下,使用Large Batch-size的訓(xùn)練會(huì)與使用較小批次的訓(xùn)練相比,模型的驗(yàn)證精度降低。很多研究提出了啟發(fā)式搜索的方法來解決這個(gè)問題。下面將研究4種啟發(fā)式方法,可以在單臺(tái)機(jī)器訓(xùn)練中擴(kuò)大Batch-size的規(guī)模。

1)Linear scaling learning rate
在Mini-Batch SGD中,由于樣本是隨機(jī)選取的,所以梯度下降也是一個(gè)隨機(jī)的過程。增加批量大小不會(huì)改變隨機(jī)梯度的期望,但會(huì)減小隨機(jī)梯度的方差。換句話說,大的批量降低了梯度中的噪聲,因此我們可以通過提高學(xué)習(xí)率來在梯度相反的方向上取得更大的進(jìn)展。

Goyal等人提出對(duì)于ResNet-50訓(xùn)練,經(jīng)驗(yàn)上可以根據(jù)批大小線性增加學(xué)習(xí)率。特別是,如果選擇0.1作為批量大小256的初始學(xué)習(xí)率,那么當(dāng)批量大小b變大時(shí)可以將初始學(xué)習(xí)率提高到:

2)Learning rate Warmup
在訓(xùn)練開始時(shí),所有參數(shù)通常都是隨機(jī)值,因此離最優(yōu)解很遠(yuǎn)。使用過大的學(xué)習(xí)率可能導(dǎo)致數(shù)值不穩(wěn)定。在Warmup中,在一開始使用一個(gè)比較小的學(xué)習(xí)率,然后當(dāng)訓(xùn)練過程穩(wěn)定時(shí)切換回初始設(shè)置的學(xué)習(xí)率base/_lr。

Goyal等人提出了一種Gradual Warmup策略,將學(xué)習(xí)率從0線性地提高到初始學(xué)習(xí)率。換句話說,假設(shè)將使用前m批(例如5個(gè)數(shù)據(jù)epoch)進(jìn)行Warmup,并且初始學(xué)習(xí)率為,那么在第批時(shí)將學(xué)習(xí)率設(shè)為i/=m。

3)Zero
一個(gè)ResNet網(wǎng)絡(luò)由多個(gè)殘差塊組成,而每個(gè)殘差塊又由多個(gè)卷積層組成。給定輸入,假設(shè)是Last Layer的輸出,那么這個(gè)殘差塊就輸出。注意,Block的最后一層可以是批處理標(biāo)準(zhǔn)化層。
BN層首先標(biāo)準(zhǔn)化它的輸入用表示,然后執(zhí)行一個(gè)scale變換。兩個(gè)參數(shù)、都是可學(xué)習(xí)的,它們的元素分別被初始化為1s和0s。在零初始化啟發(fā)式中,剩余塊末端的所有BN層初始化了。因此,所有的殘差塊只是返回它們的輸入,模擬的網(wǎng)絡(luò)層數(shù)較少,在初始階段更容易訓(xùn)練。

4)No bias decay
權(quán)值衰減通常應(yīng)用于所有可學(xué)習(xí)參數(shù),包括權(quán)值和偏差。它等價(jià)于應(yīng)用L2正則化到所有參數(shù),使其值趨近于0。但如Jia等所指出,建議僅對(duì)權(quán)值進(jìn)行正則化,避免過擬合。無偏差衰減啟發(fā)式遵循這一建議,它只將權(quán)值衰減應(yīng)用于卷積層和全連通層中的權(quán)值。其他參數(shù),包括偏差和和以及BN層,都沒有進(jìn)行正則化。
LARS提供了分層自適應(yīng)學(xué)習(xí)率,并且對(duì)大的Batch-size(超過16K)有效。本文中單機(jī)訓(xùn)練的情況下,批量大小不超過2K通常會(huì)導(dǎo)致良好的系統(tǒng)效率。

2.2、Low-precision training

神經(jīng)網(wǎng)絡(luò)通常是用32位浮點(diǎn)(FP32)精度訓(xùn)練的。也就是說,所有的數(shù)字都以FP32格式存儲(chǔ),輸入和輸出以及計(jì)算操作都是FP32類型參與的。然而,新的硬件可能已經(jīng)增強(qiáng)了新的算術(shù)邏輯單元,用于較低精度的數(shù)據(jù)類型。
例如,前面提到的Nvidia V100在FP32中提供了14個(gè)TFLOPS,而在FP16中提供了超過100個(gè)TFLOPS。如下表所示,在V100上從FP32切換到FP16后,整體訓(xùn)練速度提高了2到3倍。

盡管有性能上的好處,降低的精度有一個(gè)更窄的范圍,使結(jié)果更有可能超出范圍,然后干擾訓(xùn)練的進(jìn)展。Micikevicius等人提出在FP16中存儲(chǔ)所有參數(shù)和激活,并使用FP16計(jì)算梯度。同時(shí),F(xiàn)P32中所有的參數(shù)都有一個(gè)用于參數(shù)更新的副本。此外,損失值乘以一個(gè)比較小的標(biāo)量scaler以更好地對(duì)齊精度范圍到FP16也是一個(gè)實(shí)際的解決方案。

2.3、Experiment Results

3、Model Tweaks

模型調(diào)整是對(duì)網(wǎng)絡(luò)架構(gòu)的一個(gè)小調(diào)整,比如改變一個(gè)特定卷積層的stride。這樣的調(diào)整通常不會(huì)改變計(jì)算復(fù)雜度,但可能會(huì)對(duì)模型精度產(chǎn)生不可忽略的影響。

3.1、ResNet Tweaks

回顧了ResNet的兩個(gè)比較流行的改進(jìn),分別稱之為ResNet-B和ResNet-C。在此基礎(chǔ)上,提出了一種新的模型調(diào)整方法ResNet-D。

1)ResNet-B
ResNet-B改變的下采樣塊。觀察到路徑A中的卷積忽略了輸入feature map的四分之三,因?yàn)樗褂玫膬?nèi)核大小為1×1,Stride為2。ResNet-B切換路徑A中前兩個(gè)卷積的步長大小,如圖a所示,因此不忽略任何信息。由于第2次卷積的kernel大小為3×3,路徑a的輸出形狀保持不變。

2)ResNet-C
卷積的計(jì)算代價(jià)是卷積核的寬或高的二次項(xiàng)。一個(gè)7×7的卷積比3×3的卷積的計(jì)算量更大。因此使用3個(gè)3x3的卷積替換1個(gè)7x7的卷積,如圖b所示,與第1和第2個(gè)卷積block的channel=32,stride=2,而最后卷積使用64個(gè)輸出通道。

3)ResNet-D
受ResNet-B的啟發(fā),下采樣塊B路徑上的1x1卷積也忽略了輸入feature map的3/4,因此想對(duì)其進(jìn)行修改,這樣就不會(huì)忽略任何信息。通過實(shí)驗(yàn)發(fā)現(xiàn),在卷積前增加一個(gè)平均為2x2的avg pooling層,將其stride改為1,在實(shí)踐中效果很好,同時(shí)對(duì)計(jì)算成本的影響很小。

4、Training Refinements

4.1、Cosine Learning Rate Decay

Loshchilov等人提出了一種余弦退火策略。一種簡化的方法是通過遵循余弦函數(shù)將學(xué)習(xí)率從初始值降低到0。假設(shè)批次總數(shù)為T(忽略預(yù)熱階段),那么在批次T時(shí),學(xué)習(xí)率tm計(jì)算為:

可以看出,余弦衰減在開始時(shí)緩慢地降低了學(xué)習(xí)速率,然后在中間幾乎變成線性減少,在結(jié)束時(shí)再次減緩。與step衰減相比,余弦衰減從一開始就對(duì)學(xué)習(xí)進(jìn)行衰減,但一直持續(xù)到步進(jìn)衰減將學(xué)習(xí)率降低了10倍,從而潛在地提高了訓(xùn)練進(jìn)度。

importtorch  
  
optim=torch.optim.lr_scheduler.CosineAnnealingLR(optimizer,T_max,eta_min=0,last_epoch=-1)  

4.2、Label Smoothing

對(duì)于輸出預(yù)測(cè)的標(biāo)簽不可能像真是的label一樣真是,因此這里進(jìn)行一定的平滑策略,具體的Label Smoothing平滑規(guī)則為:

#-*-coding:utf-8-*-  
  
"""  
qi=1-smoothing(ifi=y)  
qi=smoothing/(self.size-1)(otherwise)#所以默認(rèn)可以fill這個(gè)數(shù),只在i=y的地方執(zhí)行1-smoothing  
另外KLDivLoss和crossentroy的不同是前者有一個(gè)常數(shù)  
predict=torch.FloatTensor([[0,0.2,0.7,0.1,0],  
  
[0,0.9,0.2,0.1,0],  
  
[1,0.2,0.7,0.1,0]])  
對(duì)應(yīng)的label為  
tensor([[0.0250,0.0250,0.9000,0.0250,0.0250],  
[0.9000,0.0250,0.0250,0.0250,0.0250],  
[0.0250,0.0250,0.0250,0.9000,0.0250]])  
區(qū)別于one-hot的  
tensor([[0.,0.,1.,0.,0.],  
[1.,0.,0.,0.,0.],  
[0.,1.,0.,0.,0.]])  
"""  
importtorch  
importtorch.nnasnn  
fromtorch.autogradimportVariable  
importmatplotlib.pyplotasplt  
importnumpyasnp  
  
classLabelSmoothing(nn.Module):  
"Implementlabelsmoothing.size表示類別總數(shù)"  
  
def__init__(self,size,smoothing=0.0):  
super(LabelSmoothing,self).__init__()  
self.criterion=nn.KLDivLoss(size_average=False)  
#self.padding_idx=padding_idx  
self.confidence=1.0-smoothing#ifi=y的公式  
self.smoothing=smoothing  
self.size=size  
self.true_dist=None  
  
defforward(self,x,target):  
"""  
x表示輸入(N,M)N個(gè)樣本,M表示總類數(shù),每一個(gè)類的概率logP  
target表示label(M,)  
"""  
assertx.size(1)==self.size  
true_dist=x.data.clone()#先深復(fù)制過來  
#printtrue_dist  
true_dist.fill_(self.smoothing/(self.size-1))#otherwise的公式  
#printtrue_dist  
#變成one-hot編碼,1表示按列填充,  
#target.data.unsqueeze(1)表示索引,confidence表示填充的數(shù)字  
true_dist.scatter_(1,target.data.unsqueeze(1),self.confidence)  
self.true_dist=true_dist  
returnself.criterion(x,Variable(true_dist,requires_grad=False))  
  
if__name__:  
#Exampleoflabelsmoothing.  
  
crit=LabelSmoothing(size=5,smoothing=0.1)  
#predict.shape35  
predict=torch.FloatTensor([[0,0.2,0.7,0.1,0],  
[0,0.9,0.2,0.1,0],  
[1,0.2,0.7,0.1,0]])  
  
v=crit(Variable(predict.log()),  
Variable(torch.LongTensor([2,1,0])))  
#Showthetargetdistributionsexpectedbythesystem.  
plt.imshow(crit.true_dist)  

4.3、Knowledge Distillation

在訓(xùn)練過程中增加了一個(gè)蒸餾損失,以懲罰Teacher模型和Student模型的softmax輸出之間的差異。給定一個(gè)輸入,設(shè)p為真概率分布,z和r分別為學(xué)生模型和教師模型最后全連通層的輸出。損失改進(jìn)為:

4.4、Mixup Training

在Mixup中,每次我們隨機(jī)抽取兩個(gè)例子和。然后對(duì)這2個(gè)sample進(jìn)行加權(quán)線性插值,得到一個(gè)新的sample:

其中

importnumpyasnp  
importtorch  
  
  
defmixup_data(x,y,alpha=1.0,use_cuda=True):  
ifalpha>0.:  
lam=np.random.beta(alpha,alpha)  
else:  
lam=1.  
batch_size=x.size()[0]  
ifuse_cuda:  
index=torch.randperm(batch_size).cuda()  
else:  
index=torch.randperm(batch_size)  
  
mixed_x=lam*x+(1-lam)*x[index,:]#自己和打亂的自己進(jìn)行疊加  
y_a,y_b=y,y[index]  
returnmixed_x,y_a,y_b,lam  
  
defmixup_criterion(y_a,y_b,lam):  
returnlambdacriterion,pred:lam*criterion(pred,y_a)+(1-lam)*criterion(pred,y_b)  

4.5、Experiment Results


審核編輯 黃昊宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1807

    文章

    49029

    瀏覽量

    249575
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3521

    瀏覽量

    50431
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    labview軟件自帶項(xiàng)目的問題

    的是labview2012版的,上面有一個(gè)連續(xù)采集系統(tǒng)的自帶項(xiàng)目,我現(xiàn)在做的項(xiàng)目就是連續(xù)采集。想用軟件自帶的項(xiàng)目,但是有些模塊用不了,求大神指導(dǎo)啊,已經(jīng)卡了好幾天了。還有,你們做連
    發(fā)表于 08-14 20:53

    為什么 采集的電壓 不對(duì) 如果 ad 直接接轉(zhuǎn)換的電壓就對(duì)了

    為什么 采集的電壓 不對(duì)如果 ad 直接接轉(zhuǎn)換的電壓就對(duì)了
    發(fā)表于 08-07 17:46

    畢業(yè)設(shè)計(jì)遇到瓶頸,求各位大大幫助

    畢業(yè)設(shè)計(jì)遇到瓶頸,求各位大大幫助! 還有一個(gè)月項(xiàng)目時(shí)間結(jié)束了, 我使用的是NI公司USB6003采集卡,現(xiàn)在遇到一個(gè)棘手的問題就是----- 1.如何利用DAQ采集到的模擬輸出信號(hào)來
    發(fā)表于 06-01 22:16

    keil在編譯51項(xiàng)目和stm32項(xiàng)目的警告區(qū)別?

    為什么keil在編譯51項(xiàng)目的時(shí)候,遇到沒有調(diào)用的函數(shù)就會(huì)提示W(wǎng)ARNING L16但是在編譯stm32項(xiàng)目的時(shí)候,遇到沒有調(diào)用的函數(shù)就不會(huì)有任何提示?
    發(fā)表于 05-25 17:04

    Android學(xué)習(xí)路上會(huì)遇到的各種瓶頸總結(jié)

    完全掌握的。 克服了以上瓶頸后,估計(jì)實(shí)習(xí)生也該到了畢業(yè)轉(zhuǎn)正的時(shí)間了,進(jìn)階路上還有新的瓶頸。新瓶頸有新的玩法:這種玩法需要雙手操作,如果另一
    發(fā)表于 11-13 11:12

    激光振鏡項(xiàng)目的改進(jìn)

    的根本原因,于是通過飛線實(shí)現(xiàn)了電流反饋控制,效果接近原來的參考設(shè)備,說明思路走對(duì)了。進(jìn)一步試驗(yàn)發(fā)現(xiàn),現(xiàn)有的電路,力還不是很大,于是縮小驅(qū)動(dòng)電阻,這個(gè)時(shí)候?qū)е买?qū)動(dòng)IC發(fā)熱很高,這個(gè)驅(qū)動(dòng)IC,我的是MOS管驅(qū)動(dòng)
    發(fā)表于 10-24 14:34

    Programming Tricks for Higher Conversion Speeds Utilizing De

    PROGRAMMING TRICKS FOR HIGHER CONVERSION SPEEDS UTILIZING DELTA SIGMA CONVERTERS:編程更高的轉(zhuǎn)換利用Δ-Σ轉(zhuǎn)換速度把戲
    發(fā)表于 06-01 18:05 ?28次下載

    分布式項(xiàng)目開發(fā)模型Chiefr分析

    項(xiàng)目的目的是在項(xiàng)目成員之間共享和去中心化項(xiàng)目不同部分的開發(fā)和維護(hù)。Chiefr的靈感來自于Linux內(nèi)核及其get_contributors.pl腳本的貢獻(xiàn)
    發(fā)表于 09-28 14:43 ?0次下載
    分布式<b class='flag-5'>項(xiàng)目</b>開發(fā)<b class='flag-5'>模型</b>Chiefr分析

    全年開源項(xiàng)目的盤點(diǎn)和總結(jié)

    如果你們這些.NET 開發(fā)者們想要學(xué)一點(diǎn)機(jī)器學(xué)習(xí)知識(shí)來補(bǔ)充現(xiàn)有的技能,你會(huì)怎么做?現(xiàn)在就有一個(gè)完美的開源項(xiàng)目可以助你開始實(shí)施這一想法!這個(gè)完美的開源項(xiàng)目就是微軟的一個(gè)
    的頭像 發(fā)表于 01-17 11:18 ?3629次閱讀

    機(jī)器學(xué)習(xí)模型部署到ML項(xiàng)目的過程

    在構(gòu)建一個(gè)大的機(jī)器學(xué)習(xí)系統(tǒng)時(shí),有很多事情需要考慮。但作為數(shù)據(jù)科學(xué)家,我們常常只擔(dān)心項(xiàng)目的某些部分。
    的頭像 發(fā)表于 05-04 11:56 ?2312次閱讀

    圖像分類任務(wù)的各種tricks

    計(jì)算機(jī)視覺主要問題有圖像分類、目標(biāo)檢測(cè)和圖像分割等。針對(duì)圖像分類任務(wù),提升準(zhǔn)確率的方法路線有兩條,一個(gè)是模型的修改,另一個(gè)是各種數(shù)據(jù)處理和訓(xùn)練的tricks。
    的頭像 發(fā)表于 09-14 16:42 ?1421次閱讀

    物聯(lián)網(wǎng)項(xiàng)目的原因、時(shí)間和方式

    環(huán)境清理項(xiàng)目的蜂窩解決方案、農(nóng)場灌溉的水優(yōu)化解決方案和智能城市照明的改造解決方案有什么共同之處?如果你猜到了“物聯(lián)網(wǎng)技術(shù)”,你是對(duì)的。如果您猜測(cè)這些解決方案都是針對(duì)需要解決的昂貴問題而
    的頭像 發(fā)表于 10-13 10:39 ?2054次閱讀
    物聯(lián)網(wǎng)<b class='flag-5'>項(xiàng)目的</b>原因、時(shí)間和方式

    肖特基二極管,你真的對(duì)了嗎?

    肖特基二極管,你真的對(duì)了嗎?
    的頭像 發(fā)表于 12-07 14:27 ?941次閱讀
    肖特基二極管,你真的<b class='flag-5'>用</b><b class='flag-5'>對(duì)了</b>嗎?

    AI項(xiàng)目管理平臺(tái)有什么

    當(dāng)今,AI項(xiàng)目的復(fù)雜性和多變性給項(xiàng)目管理帶來了前所未有的挑戰(zhàn)。為了有效應(yīng)對(duì)這些挑戰(zhàn),AI項(xiàng)目管理平臺(tái)應(yīng)運(yùn)而生。那么,AI項(xiàng)目管理平臺(tái)有什么
    的頭像 發(fā)表于 02-19 11:16 ?370次閱讀

    突破交付瓶頸:FPGA項(xiàng)目加速交付的“致勝密碼”

    引言在當(dāng)今快節(jié)奏的數(shù)字化時(shí)代,軟件開發(fā)、工程項(xiàng)目等各類開發(fā)進(jìn)程猶如一場與時(shí)間賽跑的競技賽。然而,項(xiàng)目延遲、瓶頸或設(shè)計(jì)挑戰(zhàn)如同賽道上的重重障礙,不斷拖慢開發(fā)的腳步。這些問題不僅影響
    的頭像 發(fā)表于 06-27 10:13 ?323次閱讀
    突破交付<b class='flag-5'>瓶頸</b>:FPGA<b class='flag-5'>項(xiàng)目</b>加速交付的“致勝密碼”