跳轉到

4.4 Transfer Learning

範例程式:Open In Colab

使用 MobileNetV2 預訓練模型建立影像分類器,示範 feature extractor、GlobalAveragePooling 與新分類頭。這篇接續 flower_photos 資料集,目標是建立一個比從零訓練 CNN 更實用的小型影像分類 baseline。

1. 學習目標

當自己的圖片資料不多時,從零訓練 CNN 通常效果有限。Transfer learning 會使用已在大型資料集上訓練過的模型當作特徵擷取器,再接上新的分類頭。

2. 核心流程

  1. 載入預訓練 backbone,例如 MobileNetV2。
  2. 凍結 backbone 權重。
  3. 接上 GlobalAveragePooling 與 Dense 分類頭。
  4. 只訓練新的分類頭。

3. 為什麼有效?

預訓練模型已經學過邊緣、紋理、形狀等通用影像特徵。即使新資料集不同,這些低階與中階特徵仍常有幫助。

4. 實作流程

Notebook 使用 flower_photos 資料集,將圖片 resize 到 MobileNetV2 需要的輸入尺寸,載入 include_top=False 的 MobileNetV2 作為 backbone,凍結 backbone 後接上 GlobalAveragePooling、Dropout 與新的 softmax 分類頭。

5. 如何套用自己的資料?

換成自己的資料時,通常只需要替換圖片資料夾、調整 img_size、確認類別數,並保留對應 backbone 的 preprocessing function。若使用 MobileNetV2,就要使用 tf.keras.applications.mobilenet_v2.preprocess_input;若換成 EfficientNet、ResNet 或其他 backbone,前處理方式也要一起替換。

6. 小結

Transfer learning 是小型影像資料集最實用的 baseline,通常比從零訓練 CNN 更穩定。