AI時代系列(2) 機器學習三部曲: 🔹 第二部:《深度學習 —— 神經網路的革命》
28/100 第三週:📌 卷積神經網路 CNN
28.Flatten 與全連接層 📐 將特徵轉換為分類依據!
________________________________________
✅ 課程概念導讀:
在 CNN 模型中,前面的捲積層與池化層主要負責提取圖像特徵,但最終還是要「輸出分類結果」。這就需要透過:
1. Flatten:將多維的特徵圖壓平成一維向量
2. 全連接層(Dense):將這些特徵組合起來進行決策與分類
________________________________________
📐 一、什麼是 Flatten?
Flatten 是將捲積後的 3D 特徵圖(高 × 寬 × 通道數)轉換成一維向量,讓資料可以進入全連接層做分類。
例子:
• 特徵圖輸出為 (7, 7, 64) → Flatten 之後為 7×7×64 = 3136 維向量
________________________________________
🧠 二、什麼是全連接層(Dense Layer)?
Dense Layer 是一個每個輸入都與每個神經元相連的層,常用於分類任務的最後幾層。
• 每個神經元的輸出為:
y=f(W⋅x+b)y
其中:
o x 是輸入向量(如 Flatten 後)
o W 是權重,b 是偏差
o f() 是激活函數(常用 ReLU / Softmax)
________________________________________
⚙️ TensorFlow / Keras 實作:
python
from tensorflow.keras import layers, models
model = models.Sequential([
layers.Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
layers.MaxPooling2D((2, 2)),
layers.Flatten(),
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax') # 10 類別分類
])
這段程式碼建立了一個典型的卷積神經網路(CNN),專為處理 28×28 灰階圖像(如 MNIST 手寫數字)而設計。模型流程如下:
首先透過 Conv2D 層提取 32 個 3×3 的局部特徵並套用 ReLU 激活,再經由 MaxPooling2D 層將特徵圖縮小一半,降低維度;接著 Flatten 將特徵圖攤平成向量,輸入至兩層全連接層:第一層具有 128 個神經元並使用 ReLU,第二層輸出 10 個節點,搭配 softmax 激活,用於進行 10 類別的分類任務。整體模型簡潔實用,適合影像分類的入門範例。
_____________________________________
🎯 為什麼不能直接分類捲積特徵圖?
問題 解釋
捲積特徵圖是多維資料 Dense 層只能處理向量(1D)
每個通道有空間位置資訊 必須轉換為純特徵向量,交由 Dense 層綜合判斷
模型決策需要整合特徵 Flatten 讓模型將所有特徵集中考慮
________________________________________
📊 Flatten + Dense 的常見搭配:
操作層 功能說明
Flatten() 將卷積產生的特徵圖攤平成向量
Dense(128) 高層語義特徵組合 → 提取抽象關聯
Dense(10) 輸出層,對應 10 類別分類(使用 Softmax)
________________________________________
💡 額外補充:Global Average Pooling 是替代方案?
在某些模型中會用 GlobalAveragePooling2D 取代 Flatten + Dense:
• 優點:參數更少,不易過擬合
• 常用於輕量模型(如 MobileNet、EfficientNet)
python
layers.GlobalAveragePooling2D()
________________________________________
🧠 類比說明:
• 捲積層:像攝影師拍了很多細節特寫
• Flatten:把這些照片全部攤開變成一條線
• Dense:像資深編輯根據這些照片內容給出總結與判斷(這是狗還是貓?)
________________________________________
🎯 小結與啟示:
✅ Flatten 是 CNN → MLP 的橋樑
✅ Dense 層負責抽象整合所有卷積特徵,做出分類決策
✅ 結合 Softmax 或 Sigmoid,可處理多類別或二分類任務
✅ 是 CNN 模型走向「輸出結果」的最後一哩路!