iT邦幫忙

2025 iThome 鐵人賽

0
AI & Data

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

Day 17:遷移學習 Transfer Learning 概念

  • 分享至 

  • xImage
  •  

經過前幾天的 CNN 核心機制與現代架構練功,我們知道從零開始訓練高性能模型既耗資料又吃算力。遷移學習就是把在大型資料集上學到的通用視覺知識,轉移到你的新任務,達到高準確、低資源的實戰目標。

一、遷移學習的動機與核心思想

  1. 現實挑戰:資源與資料稀缺

任務例:辨識工廠五種產品缺陷

條件:僅有數百張影像,無法負擔從零訓練的大型網路

  1. 核心思想:知識具通用性

在 ImageNet 等大規模資料上訓練的模型,淺層卷積會學到通用特徵:邊緣、角點、顏色梯度、紋理、簡單形狀

這些特徵對多數影像任務都適用 → 把通用特徵帶到你的小數據任務上

二、核心機制:預訓練模型的結構拆解

  1. 什麼是預訓練模型

已在大型公開資料上完成訓練的 CNN 模型,例如 VGG16、ResNet34

權重已學到良好的通用表徵,可直接拿來當特徵抽取器

  1. 兩大區塊與處理方式
部位 作用 推薦處理方式
卷積基底 Convolutional Base 提取通用視覺特徵 邊緣 形狀 紋理 先凍結 Freeze 權重
分類器頭部 Classifier Head 針對任務做最終分類 替換為新任務類別數 重新訓練

三、兩種常見的遷移策略

  1. 特徵提取 Feature Extraction

做法:完全凍結卷積基底,只訓練新的分類頭

適用:資料量少,且新舊任務相似度高

優點:快速、穩健、過擬合風險低

  1. 微調 Fine Tuning

做法:先用預訓練權重,解凍最後幾層卷積,配很小學習率再訓練

適用:資料較多,或新舊任務差異大 例如從自然影像轉醫療 X 光

優點:通用特徵會被微調以貼近新領域

四、實作範例速抄
以下程式碼展示了如何將 ResNet34 的卷積基底凍結,並為 num_classes = 5 的新任務替換分類頭。

import torch, torch.nn as nn
from torchvision import models

num_classes = 5

//準備工作: 引入 PyTorch 庫和 torchvision 中的預訓練模型。設定新任務的類別數為 5。

model = models.resnet34(weights=models.ResNet34_Weights.IMAGENET1K_V1)

// 載入基底模型: 載入 ResNet34 模型,並使用在 ImageNet-1K 資料集上訓練好的權重。此時模型已具備強大的特徵提取能力。

for p in model.parameters():
    p.requires_grad = False
    
//凍結卷積基底: 遍歷模型的所有參數,將它們的 requires_grad 屬性設為 False。這意味著在後續的訓練中,卷積層的權重將不再更新(被「凍結」)。
    
in_f = model.fc.in_features

//擷取輸入維度: 取得 ResNet34 原始全連接層 (model.fc) 的輸入特徵數量。這個數值代表卷積基底輸出的特徵維度。

model.fc = nn.Linear(in_f, num_classes)

//替換分類頭: 用一個全新的全連接層替換原有的分類層。新層的輸入維度保持不變 (in_f),但輸出維度被設為新任務的類別數 (num_classes = 5)。

optimizer = torch.optim.Adam(model.fc.parameters(), lr=1e-3)

只優化分類頭: 建立優化器 (Adam),但只將新替換的 model.fc 層參數傳入。這確保了在訓練期間,只有分類頭的權重會被學習和更新,而前面凍結的卷積層保持不變。

遷移學習是深度學習在資源有限情境下的黃金法則。

它不再要求我們從零開始「造輪子」,而是讓我們站在 ImageNet 時代巨人的肩膀上。透過巧妙地凍結通用特徵(卷積基底)與重塑決策結構(分類頭),我們得以用更少的資料、更短的時間,快速建立起一個具備高準確度的影像分類系統。在追求效率和部署速度的實戰應用中,掌握遷移學習,就是掌握了通往高效 AI 專案的快速通道。


上一篇
Day 16:Max Pooling 與 Flatten 解析
下一篇
Day 18專案發想與資料集準備 (IDEA & DATASET)
系列文
從入門村到最終 BOSS:30 天打通深度學習主線18
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言