在alexnet的權(quán)值遷移成功后,下一步要做的就是將這個(gè)網(wǎng)絡(luò)fine-tune成適用于自己的數(shù)據(jù)集的網(wǎng)絡(luò)硼瓣。這里我主要把這部分工作分成三部分
1.重新訓(xùn)練最后一層fc層
顯然癣漆,最后一層fc層肯定和你想要輸出的分類信息有關(guān)的,所以這一層的權(quán)值必須要重新訓(xùn)練
2.確定需要fine-tune的網(wǎng)絡(luò)
最簡單的情況是固定所有的權(quán)值(在初始化權(quán)值變量的時(shí)候聲明此變量不可訓(xùn)練),只重新訓(xùn)練最后一層fc層禽炬,從實(shí)驗(yàn)結(jié)果來看這個(gè)結(jié)果比較差。fine-tune越多層網(wǎng)絡(luò)勤家,有可能得到更好的效果腹尖,但是耗時(shí)也越久
在我實(shí)現(xiàn)的例子中,我直接是在模型函數(shù)里確定哪些層是可訓(xùn)練的,這點(diǎn)只需要在聲明變量的時(shí)候設(shè)置trainable參數(shù)值就可以(True表示可訓(xùn)練热幔,F(xiàn)alse表示不可訓(xùn)練)
改進(jìn):一般來說不會將整個(gè)網(wǎng)絡(luò)都微調(diào)(fine-tune)來適應(yīng)自己的數(shù)據(jù)集乐设,也就是說總有一些網(wǎng)絡(luò)層是不可訓(xùn)練的。但是如果我們?nèi)稳辉谟?xùn)練的過程中不斷循環(huán)的把image傳遞(feed in)到這些層中绎巨,顯然這樣做很耗時(shí)而且是沒有意義的(因?yàn)檫@些層是不可學(xué)習(xí)的近尚,同一張照片傳遞1次和傳遞10000次都是一樣的效果),一種改進(jìn)方法是一次性將圖片傳遞進(jìn)這些網(wǎng)絡(luò)场勤,保存提取下來的信息戈锻,然后再循環(huán)的將這些信息傳遞到可訓(xùn)練的網(wǎng)絡(luò)層里面(相當(dāng)于用不能fine-tune的網(wǎng)絡(luò)來提取圖片的特征信息,然后再建立網(wǎng)絡(luò)來處理這些特征信息)
3.調(diào)整自己的數(shù)據(jù)集和媳,滿足網(wǎng)絡(luò)的輸入要求格遭,同時(shí)可以使用數(shù)據(jù)增強(qiáng)(data augment)技術(shù),擴(kuò)展數(shù)據(jù)集
實(shí)驗(yàn)結(jié)果:
這里我用的數(shù)據(jù)集是inception模型遷移學(xué)習(xí)中用的5種花的分類
分別比較fine-tune不同層網(wǎng)絡(luò)的效果
橙色微調(diào)網(wǎng)絡(luò)最多:從conv5-fc6-fc7-fc8
淺藍(lán)中間:從fc6-fc7-fc8
深藍(lán)微調(diào)最淺的網(wǎng)絡(luò):fc7-fc8
可以看到從效果來說微調(diào)的網(wǎng)絡(luò)越多效果就越好留瞳,但是耗時(shí)也會越多拒迅。
改進(jìn):
可以看到上面跑10,000個(gè)循環(huán)就花了差不多一個(gè)小時(shí),還是有點(diǎn)慢的她倘。主要優(yōu)化的點(diǎn)在于那些不微調(diào)的網(wǎng)絡(luò)層璧微。
假設(shè)一張圖片,在alexnet中要訓(xùn)練1000次硬梁,也就是每一層網(wǎng)絡(luò)都要前向前硫,反向這張圖片1000次。對于可學(xué)習(xí)的網(wǎng)絡(luò)層來說這樣做肯定是必須的荧止,但是對于不可學(xué)習(xí)的網(wǎng)絡(luò)層(如conv1-conv2-con3-con4等)开瞭,這樣就顯得沒有必要了,因?yàn)檫@些層的參數(shù)不可改變罩息,所以沒有必要反向計(jì)算。
所以一種很直觀的方法是將圖片集一次傳遞到這些不可訓(xùn)練的網(wǎng)絡(luò)中个扰,存儲起來作為特征輸入瓷炮。以后的訓(xùn)練輸入就是這些特征值,下面可以看到這樣做加速的訓(xùn)練大概6倍左右(改進(jìn)前訓(xùn)練10000次要50min,改進(jìn)后只需要8min)
微調(diào)不同層效果對比(用不能學(xué)習(xí)的網(wǎng)絡(luò)層來提取特征):
可以看到訓(xùn)練1000*10次递宅,總體來說各種方法的區(qū)別并不是很大娘香。微調(diào)越多層的網(wǎng)絡(luò)效果稍微好一點(diǎn),但是也要花更多的時(shí)間訓(xùn)練办龄。同時(shí)注意conv4-fc8方案烘绽,在訓(xùn)練到300次的時(shí)候表現(xiàn)大幅下滑,我覺得可能是因?yàn)閷W(xué)習(xí)率過高的關(guān)系俐填。這也說明了微調(diào)越多層安接,就需要越多訓(xùn)練網(wǎng)絡(luò)的技巧,訓(xùn)練出一個(gè)好的網(wǎng)絡(luò)也越困難英融。
結(jié)論:
1.對于AlexNet模型對于沒有在訓(xùn)練中將的圖片也是有用的盏檐,特別是網(wǎng)絡(luò)越靠近輸入歇式,其提取的特征就越具有普適性。表現(xiàn)在這次試驗(yàn)中的是微調(diào)越多的網(wǎng)絡(luò)胡野,得到的效果就越好
2.如果不是微調(diào)整個(gè)模型材失,就不要將整個(gè)模型拿來訓(xùn)練。也就是用不訓(xùn)練的層拿來做特征提取硫豆,對所有的圖片只前向運(yùn)算一次龙巨,將運(yùn)算得到的特征作為后面網(wǎng)絡(luò)層的輸入。在本次試驗(yàn)中可以看到這樣子做可以大大的加快訓(xùn)練過程熊响。
3.關(guān)于Inception-v3與AlexNet模型在同樣的一種訓(xùn)練集上的遷移學(xué)習(xí)效果對比:
可以看到Inception模型的效果確實(shí)是比AlexNet的效果好很多旨别,用Inception模型提取最后一層網(wǎng)絡(luò)的特征再重新分類,在1000次循環(huán)(大概用時(shí)1min)就能達(dá)到90%的準(zhǔn)確率(測試集)耘眨,而對于AlexNet,即使是改進(jìn)后的網(wǎng)絡(luò)訓(xùn)練10000次(大概8min)大概準(zhǔn)確率(測試集)在83%左右.但是兩個(gè)網(wǎng)絡(luò)只單純的增加訓(xùn)練時(shí)間是不能再提高準(zhǔn)確率了(AlexNet維持在85%左右)