ResNet
- 亮點(diǎn):網(wǎng)絡(luò)結(jié)構(gòu)特別深
(突變點(diǎn)是因?yàn)閷W(xué)習(xí)率除0.1?)
梯度消失:假設(shè)每一層的誤差梯度是一個(gè)小于1的數(shù),則在反向傳播過程中,每向前傳播一層,都要乘以一個(gè)小于1的誤差梯度。當(dāng)網(wǎng)絡(luò)越來越深的時(shí)候,相乘的這些小于1的系數(shù)越多,就越趨近于0,這樣梯度就會(huì)越來越小。
梯度爆炸:反之,如果梯度是一個(gè)大于1的數(shù),則在反向傳播過程中,每經(jīng)過一層都要乘一個(gè)大于1的數(shù),隨著層數(shù)不斷加深,梯度會(huì)越來越大。
解決方法:對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理,權(quán)重初始化,BN(Batch Normalization)處理。
但是在解決梯度消失、梯度爆炸之后仍然存在退化問題:層數(shù)深的網(wǎng)絡(luò)效果仍然沒有層數(shù)少的網(wǎng)絡(luò)效果好。
解決退化問題:殘差結(jié)構(gòu)。
(???
有突變應(yīng)該是前期凍結(jié)了網(wǎng)絡(luò)主干進(jìn)行訓(xùn)練
突變是迭代到一定次數(shù),學(xué)習(xí)率會(huì)改變,一般是乘以0.1
)
- 殘差結(jié)構(gòu)
左邊:對(duì)網(wǎng)絡(luò)層數(shù)較少的使用的殘差結(jié)構(gòu)
在主分支上經(jīng)過一系列卷積層后得到的特征矩陣,再與輸入特征矩陣進(jìn)行相加(兩個(gè)矩陣在相同維度的位置上加法運(yùn)算(googlenet:深度方向拼接)),相加之后再通過relu函數(shù)。
右邊:對(duì)網(wǎng)絡(luò)層數(shù)較多的使用的殘差結(jié)構(gòu)
兩個(gè)1x1的卷積層:輸入矩陣深度(channel)為256,通過第一個(gè)1x1的卷積層后深度變?yōu)?4(—>降維),……,通過第二個(gè)1x1的卷積層后深度變?yōu)?56(—>升維)。
—> 這樣原矩陣跟輸出的矩陣寬度高度深度是一樣的,即可相加。
左右兩邊所用到的參數(shù)對(duì)比:
原文中的參數(shù)列表:
網(wǎng)絡(luò)框架類似
-
實(shí)線與虛線:
實(shí)線結(jié)構(gòu):輸入和輸出的特征矩陣形狀shape一樣,可以直接進(jìn)行相加。
虛線結(jié)構(gòu):輸入輸出shape不一致,需要調(diào)整stride和kernel size。
輸入:56x56x64
輸出:28x28x128
通過虛線殘差結(jié)構(gòu)得到輸出后,再將輸出輸入到實(shí)線殘差結(jié)構(gòu)中,才能保證輸入、輸出特征矩陣的shape是一模一樣的。
(
就算是虛線也不一樣,有的層是高寬、通道數(shù)都調(diào)整,有的只調(diào)整深度。
)
虛線殘差結(jié)構(gòu)有一個(gè)額外作用:將輸入矩陣的高、寬、深度都進(jìn)行變換。
對(duì)于實(shí)線部分,它所輸入的特征矩陣和輸出的特征矩陣是一模一樣的,所以在conv3_x、conv4_x、conv5_x對(duì)應(yīng)的殘差結(jié)構(gòu)第一層都是指的虛線殘差結(jié)構(gòu)。因?yàn)榈谝粚颖仨氁獙⑸弦粚拥妮敵鼍仃嚨母邔捝疃日{(diào)整為當(dāng)前層所需要的特征矩陣的高寬深度。
————————————————————————
對(duì)于18層和34層的網(wǎng)絡(luò)而言,通過池化層后所得到的特征矩陣就是56x56x64,而殘差結(jié)構(gòu)所需要的剛好也是這個(gè)shape。所以對(duì)這種淺層網(wǎng)絡(luò)而言,不需要在第一層使用虛線的殘差結(jié)構(gòu)的。
但是對(duì)50層、101層、152層這樣的深層結(jié)構(gòu)而言,通過最大池化下采樣后,所得到的特征矩陣深度是56x56x64,但是所期望的輸入特征矩陣是 56x56x256。
BN
目的:
①使一批(batch)數(shù)據(jù)所對(duì)應(yīng)的feature map(特征矩陣)每個(gè)channel所對(duì)應(yīng)的維度滿足均值為0、方差為1的分布規(guī)律。
②加速網(wǎng)絡(luò)的訓(xùn)練,提升準(zhǔn)確率。
調(diào)整feature map,讓每一層的feature map都能滿足均值為0、方差為1的分布規(guī)律。
調(diào)整的是輸入的一批數(shù)據(jù)的feature map的每一層的分布,并不是單獨(dú)去調(diào)整某一個(gè)圖像的feature map所對(duì)應(yīng)的每一層的的分布。
假設(shè)batch size設(shè)置為2,輸入兩張圖片之后所得到的特征矩陣:feature1、feature2。
對(duì)這兩個(gè)特征矩陣進(jìn)行BN處理:
①計(jì)算均值和方差。
對(duì)channel1:計(jì)算整個(gè)batch中channel為1的均值和方差。
通過求均值、求方差的公式,分別求得均值和方差(都是向量,維度與深度對(duì)應(yīng))
再通過論文所給的公式計(jì)算,就能得到通過BN之后所得到的特征矩陣的值。
使用BN時(shí)需要注意的一些問題
1、因?yàn)樵谟?xùn)練中是要不斷統(tǒng)計(jì)均值和方差,在驗(yàn)證過程或者預(yù)測(cè)過程中,使用的是歷史統(tǒng)計(jì)的方差, 不是使用當(dāng)前計(jì)算的均值和方差。
遷移學(xué)習(xí)
1、大大減少訓(xùn)練時(shí)間。
2、若網(wǎng)絡(luò)特別大(對(duì)應(yīng)參數(shù)多),而數(shù)據(jù)集又特別小,不足以訓(xùn)練整個(gè)網(wǎng)絡(luò)?!?gt; 出現(xiàn)過擬合。
(
過擬合:數(shù)據(jù)太少,模型無法充分訓(xùn)練,容易過度擬合的符合少量訓(xùn)練數(shù)據(jù)的特征
)
**使用別人預(yù)訓(xùn)練好的模型參數(shù),一定要注意別人預(yù)處理的方式。**改成跟別人一樣的與處理方式。
遷移學(xué)習(xí)簡介:
比較通用的信息,在本網(wǎng)絡(luò)中適用,在其他網(wǎng)絡(luò)中也適用。
將淺層網(wǎng)絡(luò)中的一些參數(shù)遷移到新的網(wǎng)絡(luò)中來,則新網(wǎng)絡(luò)也有了識(shí)別底層特征的能力。則新網(wǎng)絡(luò)可以更加快速地學(xué)習(xí)數(shù)據(jù)集的高維特征。
常見的遷移學(xué)習(xí)方式:
1、載入權(quán)重后訓(xùn)練所有的參數(shù)。
使用別人預(yù)訓(xùn)練好的模型參數(shù),全部載入進(jìn)來后,針對(duì)我們的數(shù)據(jù)集,去訓(xùn)練所有層的網(wǎng)絡(luò)參數(shù)。
注意最后一層全連接層(途中以VGG為例),要將這一層的全連接節(jié)點(diǎn)個(gè)數(shù)改成我們網(wǎng)絡(luò)所對(duì)應(yīng)的分類個(gè)數(shù)。
2、載入后只訓(xùn)練最后幾層的參數(shù)。
如:固定全連接層之前的所有模型參數(shù),只訓(xùn)練最后的三層全連接層。這樣參數(shù)會(huì)變少,訓(xùn)練速度會(huì)變快。
3、載入權(quán)重后在原網(wǎng)絡(luò)的基礎(chǔ)上再添加一層新的全連接層,僅訓(xùn)練最后以惡全連接層。這樣就可以載入所有的模型參數(shù)。
新的全連接層的節(jié)點(diǎn)個(gè)數(shù)就是訓(xùn)練集的分類個(gè)數(shù)。
在很短時(shí)間內(nèi)得到一個(gè)比較理想的結(jié)果:2、3都行
硬件參數(shù)不受限,想要得到一個(gè)最優(yōu)的結(jié)果:1
pytorch搭建ResNet
搭建針對(duì)18層、34層的殘差結(jié)構(gòu)
conv3_x、conv4_x、conv5_x對(duì)應(yīng)的殘差結(jié)構(gòu)第一層都是指的虛線殘差結(jié)構(gòu)。每一層的第一個(gè)殘差結(jié)構(gòu)有降維的作用。
BasicBlock既要有實(shí)線的殘差結(jié)構(gòu),又要有虛線的殘差結(jié)構(gòu)功能。
(
下采樣:圖像高寬變小。上采樣:圖像高寬變大。
)
搭建針對(duì)50層、101層、152層殘差結(jié)構(gòu)。
4倍
blocks_num
resnet結(jié)構(gòu)
train
(以34層的為例)
可以把預(yù)訓(xùn)練權(quán)重的鏈接復(fù)制到迅雷里面下載
放到項(xiàng)目中
訓(xùn)練腳本的大部分代碼與之前的AlexNet、VGG……相同,有一些不一樣的地方是:
1、訓(xùn)練集:在對(duì)圖像進(jìn)行標(biāo)準(zhǔn)化處理的時(shí)候,這里的標(biāo)準(zhǔn)化參數(shù)都是來自官網(wǎng)所提供的一個(gè)教程中,照搬參數(shù)。
驗(yàn)證集:之前都是把圖片resize到224224。
這里:將最小邊縮放到256(原圖片長寬比對(duì)應(yīng)不動(dòng))、
中心裁剪,裁剪出一個(gè)224224大小的圖片
(如果采用遷移學(xué)習(xí),必須跟人家的與處理方式一樣,不然訓(xùn)練效果很差。不能直接resize 224)
2、linux將這個(gè)線程個(gè)數(shù)設(shè)置成>0的數(shù),加速圖像預(yù)處理過程
(windows一定記得將num_workers設(shè)置為0)
3、此處實(shí)例化沒有傳入num_classes文章來源:http://www.zghlxwxcb.cn/news/detail-410159.html
predict 預(yù)測(cè)腳本
1、采用和訓(xùn)練方法一樣的標(biāo)準(zhǔn)化處理,所以這里的參數(shù)與訓(xùn)練中使用的一樣。
2、傳入num_classes=5文章來源地址http://www.zghlxwxcb.cn/news/detail-410159.html
到了這里,關(guān)于人工智能學(xué)習(xí)07--pytorch14--ResNet網(wǎng)絡(luò)/BN/遷移學(xué)習(xí)詳解+pytorch搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!