iT邦幫忙

2025 iThome 鐵人賽

0
AI & Data

從入門村到最終 BOSS:30 天打通深度學習主線系列 第 21

Day 21:多模型訓練 Stage 1 & Stage 2 微調

  • 分享至 

  • xImage
  •  

我們完成了數據的結構化分割,並實作了 DataLoader,將乾淨的圖片轉化為模型可食用的數據流。今天,我們將正式進入訓練環節:首先進行快速的 Stage 1 訓練,然後進入關鍵的 Stage 2 微調 (Fine Tuning),並開始比較三個模型的性能。

一、遷移學習基底模型介紹
我的專案目標是找出最適合自然災害影像分類的模型。我選擇了三種在深度學習領域具有代表性和不同優勢的 CNN 架構作為我的媽媽:

模型架構 核心設計與特性 優勢與應用場景 專案定位
ResNet34 殘差連接 (Residual Blocks):緩解梯度消失,允許更深網路穩定訓練。 學習穩定、收斂快,是公認可靠的基準模型 穩定性標準:觀察訓練過程的可靠性。
VGG16 小卷積核 3×3 堆疊:以連續小核增深度與非線性,結構清晰、直觀。 架構容易理解,適合觀察淺層特徵的學習情況。 對比模型:用於比較與 ResNet 的差異。
EfficientNet-B0 複合縮放 (Compound Scaling):同時平衡深度、寬度、解析度以提升效率。 參數少、效率高,適合資源受限快速推理的場景。 高效模型:評估在高準確率下降資源消耗。

二、多模型 Stage 1 訓練:凍結與分類頭訓練
在 Stage 1,我們只用 ImageNet 權重初始化模型,然後凍結卷積基底,只訓練替換後的分類頭,快速讓模型適應新的災害類別。

  1. 模型載入與凍結
    我使用 Fast.ai 的 cnn_learner 簡化了遷移學習的初始化步驟。

from fastai.vision.all import *

# 載入 ResNet34 預訓練模型
learn_resnet = cnn_learner(dls, resnet34, metrics=accuracy)
# cnn_learner 自動:載入 ImageNet 權重、凍結卷積基底、替換分類頭。
  1. 啟動 Stage 1 訓練我對三個模型都使用 $1e-3$ 的學習率進行了 3 個 Epoch 的快速訓練。

https://ithelp.ithome.com.tw/upload/images/20251106/20153667YGBwVRXEhA.jpg


# 訓練 ResNet34, VGG16, EfficientNetB0
learn_resnet.fit_one_cycle(3, lr_max=1e-3)
learn_vgg.fit_one_cycle(3, lr_max=1e-3)
learn_effnet.fit_one_cycle(3, lr_max=1e-3)

# 儲存 Stage 1 權重為 Stage 2 做準備
myModel = myPath + '/resnet34_stage-1'
learn_resnet.save(myModel)

三、Stage 2 核心策略:解凍與微調 (Unfreeze & Fine-tune)

Stage 1 提供了基本分類能力。為了讓模型能學習自然災害影像特有的高階特徵,我們必須進入更關鍵的 Stage 2。

  1. 解凍與差分學習率 (Differential Learning Rates) 實作
    我將整個模型解凍,並實施差分學習率:對淺層使用極低學習率(保護通用特徵),對深層使用較高學習率(適應新領域)。

https://ithelp.ithome.com.tw/upload/images/20251106/20153667aqArOakN9y.jpg

https://ithelp.ithome.com.tw/upload/images/20251106/20153667rXvXjOqr4F.jpg

https://ithelp.ithome.com.tw/upload/images/20251106/20153667PFRu2AriAk.jpg

# 重新載入 Stage 1 權重並解凍模型
learn_resnet.load('resnet34_stage-1') 
learn_resnet.unfreeze()

# 使用差別學習率進行 6 個 Epoch 的微調
learn_resnet.fit_one_cycle(6, slice(1e-6, 1e-4)) 
# slice(1e-6, 1e-4) 是微調的精髓:淺層權重微調,深層權重調整幅度較大。
  1. Stage 2 訓練結果監控
    ResNet34 在 Stage 2 微調過程中的性能變化:

觀察: 驗證集損失 (valid_loss) 顯著下降,準確度 (accuracy) 穩定在 95.79% 左右。這證明 Stage 2 微調策略成功讓模型找到了高泛化能力的權重。


上一篇
Day 20:資料結構化、擴增
下一篇
Day 22:最終測試
系列文
從入門村到最終 BOSS:30 天打通深度學習主線30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言