CNN 之 fine-tune methods

CNN 的基本結(jié)構(gòu)是由卷基層和全連接層構(gòu)成的. 對于在大規(guī)模數(shù)據(jù)集(例如ImageNet)上訓(xùn)練好的網(wǎng)絡(luò), 我們可以利用它的權(quán)重來幫助我們實現(xiàn)我們的任務(wù).
從原理上來講,隨機初始化容易將網(wǎng)絡(luò)導(dǎo)向不確定的局部最優(yōu), 因此一般需要利用多次隨機初始化訓(xùn)練來驗證結(jié)果的有效性. 而借助已訓(xùn)練好的網(wǎng)絡(luò)或者說利用已訓(xùn)練好的的網(wǎng)絡(luò)權(quán)重作為網(wǎng)絡(luò)初始值已被廣泛證明有利于網(wǎng)絡(luò)以較快的速度趨于最優(yōu)化(transfer learning).
這樣做的原理往往是說不清楚的, 但是不乏附會的理由. 這里我們不糾結(jié)那些, 只來考慮如何用已訓(xùn)練好的網(wǎng)絡(luò)來進行fine-tune已適應(yīng)我們自己的數(shù)據(jù).

借助已訓(xùn)練好的網(wǎng)絡(luò), fine-tune我們自己的數(shù)據(jù). 這里分兩種情況:

  • A. 我們的輸入和網(wǎng)絡(luò)原始輸入一致(尺寸)
    原始網(wǎng)絡(luò)結(jié)構(gòu)(除了輸出層class的個數(shù)可能有差異)外, 我們可以完全接管過來.
  • B. 我們的輸入尺寸和網(wǎng)絡(luò)原始輸入尺寸有差異
    原始網(wǎng)絡(luò)的輸入層和輸出層我們都需要進行改造以處理我們自己的數(shù)據(jù). 因為在網(wǎng)絡(luò)確定的情況下,全連接層的參數(shù)規(guī)模和結(jié)構(gòu)由輸入尺寸決定. 因此輸入層和原始網(wǎng)絡(luò)不一樣, 那么原始網(wǎng)絡(luò)全連接層的權(quán)重(具體來說是最后一個卷基層和第一個全連接層處的權(quán)重)因參數(shù)尺寸不一樣,我們用不了. 因此在輸入尺寸有變化時,原始網(wǎng)絡(luò)全連接層的權(quán)重就不能用了.
    因此需要我們自己構(gòu)建全連接層.具體改造的方法隨后我會舉例代碼來說明.

fine tune 的方法.

整體訓(xùn)練:

  • 網(wǎng)絡(luò)整體利用新數(shù)據(jù)重新訓(xùn)練,所有層都是trainable的.

1 對于情況A, 權(quán)重(在輸出類別個數(shù)改變的情況下,除了最有一層外,其余層的權(quán)重都可以直接調(diào)用原始網(wǎng)絡(luò)的)可以調(diào)用原始網(wǎng)絡(luò)的. 然后在原始網(wǎng)絡(luò)上直接重新進行訓(xùn)練.
2 對于情況B, 卷積層的權(quán)重可以直接調(diào)用原始網(wǎng)絡(luò), 全連接層的權(quán)重可以:
2.1. 隨機初始化,然后整體一起訓(xùn)練.
2.2. 先freeze卷基層, 用我們的數(shù)據(jù)訓(xùn)練一下隨機初始化的全連接層,然后將訓(xùn)練好的全連接層和卷基層拼在一起,整體重新訓(xùn)練.

局部訓(xùn)練

  • 卷基層freeze, 全連接層進行訓(xùn)練.
  1. 卷基層freeze, 隨機初始化全連接層,然后用我們自己數(shù)據(jù)重新訓(xùn)練全連接層.
    這里的卷基層相當(dāng)于特征提取層, freeze的目的是為了保留它之前的特征提取能力.
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容