前提:
在《python深度學習》第五章講,使用預訓練模型VGG16與自己的密集連接分類器結(jié)合時赂乐,講了兩種方法:
- 法一:用預訓練模型的卷積基對數(shù)據(jù)集進行特征提取妙蔗,生成原訓練數(shù)據(jù)集的特征新锈,這是我們訓練分類器的訓練集芦缰,這一步暫時稱之為預特征提取孩锡。然后高职,基于預提取的特征訓練最后的密集連接層分類器藐吮。
- 法二:在卷積基的基礎上進行擴展疼约,追加密集連接分類器卤档,形成一個端到端的網(wǎng)絡。然后在凍結(jié)卷積基的條件下程剥,基于數(shù)據(jù)增強技術(shù)對整個模型進行訓練劝枣。由于卷積基被凍結(jié),其權(quán)重沒有更新,所以卷積基的作用也僅僅是用于特征提取舔腾,但是它是在線(on-the-fly)進行的溪胶,所以這一步暫時稱之為實時特征提取,以區(qū)別于上面的預特征提取稳诚。
- 原書中提到法一不能與數(shù)據(jù)增強技術(shù)結(jié)合使用哗脖,但是沒有解釋具體的原因。原因在于沒有真正理解數(shù)據(jù)增強技術(shù)的處理過程扳还。
解釋:
-
這是因為:
- 在采用數(shù)據(jù)增強技術(shù)時才避,每一輪(epoch)訓練所使用的樣本不是完全一樣的(雖然都是基于原始訓練集進行變換而得);
- 而不采取數(shù)據(jù)增強時普办,每一輪(epoch)訓練所使用的樣本是完全一樣的(可能只是使用的順序不同工扎,因為mini-batch生成的隨機性)。
預特征提取是一次性地用卷積基對訓練集進行特征提取衔蹲,即便是這里使用了“數(shù)據(jù)增強”肢娘,生成的特征集(訓練分類器的訓練集)就不會再變化了。在后面訓練中的每一輪(epoch)中都是使用相同的預提取特征(對應于使用相同的原始訓練集)舆驶。
所以方法一(預特征提瘸鹘 )速度快,計算代價低沙廉,因為對于每一個數(shù)據(jù)樣本只運行了一次卷積基拘荡,而卷積基的計算代價是遠遠大于最后的密集連接層的。而方法二(實時特征提取+數(shù)據(jù)增強)則是每一輪都要針對數(shù)據(jù)增強產(chǎn)生的不同的數(shù)據(jù)樣本進行卷積基特征提取撬陵,因此其訓練時的計算代價要遠遠大于方法一珊皿。
當然,有人解釋了理論上方法一也是可以做到預特征提取與數(shù)據(jù)增強結(jié)合使用巨税。那就是:假如你要訓練M輪蟋定,原始樣本集大小為N,則基于原始樣本集利用數(shù)據(jù)增強技術(shù)先生成N?M個樣本草添。然后利用卷積基對這個大小為N?M的增強數(shù)據(jù)樣本集進行預特征提取驶兜。然后在后續(xù)的M輪訓練,每一輪訓練中從這N?M個樣本中無放回(without replacement)地采N個樣本進行訓練远寸。這樣做的效果就與方法二(實時特征提取+數(shù)據(jù)增強技術(shù))完全一樣了抄淑,計算量和訓練效果都一樣。但是這種做法就比方法二要麻煩多了驰后,所以就沒有什么實質(zhì)性的意義肆资,不如直接采用后者。