iT邦幫忙

2026 iThome 鐵人賽

DAY 27
0
AI Engineering

從 Pixel 到 AI:30 天影像辨識入門之路系列 第 27 篇

Day27 CNN 疊越深真的越強嗎?改變模型架構實驗看看

  • 分享至 

  • xImage
  •  

前幾天我們透過 Confusion Matrix 和 Error Analysis,發現模型雖然有約 74% 的 Test Accuracy,但對不同皮膚病灶類別的辨識能力差異很大。

例如,模型經常將 mel 和 bkl 預測成 nv。

於是我開始想:

如果增加 CNN 的層數,讓模型學習更多影像特徵,分類結果會不會更好?

所以今天要介紹 CNN 的模型架構,以及 Layer、Filter、Kernel 和 Parameters 之間的關係,最後實際比較不同深度的 CNN。


一、CNN 的 Layer 是什麼?

前面我們已經使用過 Conv2D 和 MaxPooling2D。

其中,Conv2D 主要負責從圖片中學習特徵,而 MaxPooling2D 則會縮小 Feature Map 的空間尺寸,保留局部區域的重要資訊。

在 CNN 中,不同深度的 Convolution Layer 有機會學習不同層次的影像特徵。

例如較淺的 Layer 學到了邊緣、顏色變化、簡單紋理,較深的 Layer則組合前面學到的特徵,形成更複雜的影像表示。

因此增加 Layer,可能讓模型學習更複雜的特徵,但不代表一定能提升分類效果。


二、Filter 和 Kernel 有什麼不同?

在 Conv2D 中,我們常常看到:

tf.keras.layers.Conv2D(filters=32,kernel_size=(3, 3),activation="relu",padding="same")

這裡有兩個重要參數:

參數 作用
Filter 決定這一層要學習多少組不同的特徵
Kernel Size 決定每次運算觀察的局部區域大小

例如 filters=32 會產生 32 張 Feature Map,而kernel_size=(3, 3)代表每次觀察 3×3 的局部區域,Filter 數量增加,模型就有機會學習更多不同的特徵,但需要的計算量和 Parameters 通常也會增加。


三、什麼是 Parameters?

Parameters(參數)是模型在訓練過程中需要學習的數值,例如 Weight 和 Bias。

以 Conv2D 為例,參數數量與 Kernel Size、輸入 Channel 數量及 Filter 數量有關。

假設輸入是 RGB 圖片:

Kernel Size = 3×3
Input Channel = 3
Filter = 32

則參數數量為:

(3×3×3 + 1) × 32 = 896

其中 +1 代表每個 Filter 的 Bias,當模型增加 Layer 或 Filter 時,Parameters 通常也會跟著增加,不過 Parameters 越多,並不代表模型一定越好。


四、什麼是 Model Complexity?

Model Complexity(模型複雜度)可以從模型深度、寬度、參數數量及計算需求等不同角度理解。

一般來說,增加 CNN 的 Layer 或 Filter,可能提高模型學習複雜特徵的能力。

但同時也可能帶來:

  • 訓練時間增加
  • 記憶體與計算需求提高
  • Overfitting 的風險
  • 模型更難調整

因此我們要思考的是:

增加模型複雜度後,是否真的能改善它對新資料的分類表現?


五、實際比較不同深度的 CNN

這次延續前面的 HAM10000 Dataset,建立兩個不同深度的 CNN。

模型一:原本的 CNN

Input
↓
Conv2D(32) → MaxPooling
↓
Conv2D(64) → MaxPooling
↓
Flatten
↓
Dense(128)
↓
Dropout(0.5)
↓
Output(7)

模型二:增加一層 CNN

Input
↓
Conv2D(32) → MaxPooling
↓
Conv2D(64) → MaxPooling
↓
Conv2D(128) → MaxPooling
↓
Flatten
↓
Dense(128)
↓
Dropout(0.5)
↓
Output(7)

這次兩個模型都保留 Dropout(0.5),並使用相同的資料切分與訓練設定。

主要差異是第二個模型多了一組 Conv2D 和 MaxPooling2D。

因此可以觀察:增加 CNN 深度後,是否能讓模型學到更有用的影像特徵?


六、比較 Validation Loss

https://ithelp.ithome.com.tw/upload/images/20261008/20169251NJU86acUjW.png

將 2-Layer CNN 和 3-Layer CNN 的 Validation Loss 畫在一起後,可以看到兩個模型的訓練過程有所不同。

2-Layer CNN 的 Validation Loss 前期下降較快,但中間出現一些波動,後期也有回升的情況。

3-Layer CNN 前期下降較慢,不過隨著訓練進行,Validation Loss 逐漸降低,並在後期達到約 0.74,比 2-Layer CNN 的最低值約 0.76 略低。

這表示在這次實驗中,增加一層 Convolution Layer 後,模型有機會學習到更適合目前資料的影像特徵,但仍不能只根據這張曲線就認定更深的模型一定比較好。


七、比較 Test Data

最後使用相同的 Test Data,比較兩個模型的分類結果:

模型 Test Loss Test Accuracy
2-Layer CNN 0.6988 74.43%
3-Layer CNN 0.6997 74.97%

從結果可以看到,3-Layer CNN 的 Test Accuracy 從 74.43% 提升到 74.97%,約增加 0.54 個百分點。

不過 Test Loss 並沒有跟著降低,反而從 0.6988 小幅增加到 0.6997。

這代表增加 CNN 的深度後,雖然這次分類正確率稍微提高,但並不是所有評估指標都有改善。

因此,這次實驗可以得到一個結論:

增加 CNN 的 Layer 可能改善模型表現,但並不保證所有指標都會變好。


Day27 小結

今天我們認識了 CNN 的 Layer、Filter、Kernel、Parameters,以及 Model Complexity 的概念。

增加 Layer 可能讓模型學習更複雜的影像特徵,但也會改變模型的參數數量與計算需求。

因此CNN 並不是疊得越深就一定越強,還是需要透過實驗確認。

下一篇,我們將介紹 Transfer Learning,看看能不能利用已經在大量圖片上學習過的模型,改善目前的皮膚病灶分類結果。


上一篇
Day26 不要只看數字!把模型判斷錯的圖片全部抓出來
下一篇
Day28 不用每次從零開始!Transfer Learning 能打贏自己的 CNN 嗎?
系列文
從 Pixel 到 AI:30 天影像辨識入門之路 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言