{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "f9b74834",
   "metadata": {},
   "source": "# 第 12 章　卷積神經網路（CNN）：讓模型看懂影像 — 實作 Notebook\n\n「醫學生的機器學習入門」深度學習篇第 12 章配套程式。建議在 **Google Colab** 執行（選單「執行階段 → 全部執行」）；本機 Jupyter 也可以，但需要安裝 Keras 3 與 TensorFlow。\n\n- 第 1 節：用 NumPy 親手做一次卷積與池化，看懂 CNN 最基本的運算（不需要 Keras）。\n- 第 2–4 節：在胸部 X 光小圖（PneumoniaMNIST）上，把第 9 章的全連接網路和小型 CNN 放在同一份測試集比較，並畫出 CNN 學到的濾鏡與特徵圖。\n- 第 5 節（練習，**建議開 GPU，可跳過**）：多類別 CNN——BloodMNIST 8 種血球（softmax）。這一節要下載 35 MB、訓練也最久。\n\nColab 免費 CPU 全部跑完約需數分鐘；開 GPU（執行階段 → 變更執行階段類型 → T4 GPU）會快很多。沒有 Keras 的環境會自動跳過訓練段落，不會報錯。\n\n本 notebook 的醫學資料皆為公開教學資料集（MedMNIST v2，CC BY 4.0），結果僅供學習，不構成臨床建議。"
  },
  {
   "cell_type": "markdown",
   "id": "8537cb29",
   "metadata": {},
   "source": [
    "## 0. 環境檢查\n",
    "印出套件版本並固定隨機種子。Keras 必須在 `import` 前用環境變數指定後端（backend）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "3999ea28",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:50:57.105204Z",
     "iopub.status.busy": "2026-10-06T13:50:57.104557Z",
     "iopub.status.idle": "2026-10-06T13:51:12.937739Z",
     "shell.execute_reply": "2026-10-06T13:51:12.936335Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "numpy 2.1.3 | pandas 2.2.3 | scikit-learn 1.6.1 | matplotlib 3.10.0\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "keras 3.13.2 | backend: tensorflow\n"
     ]
    }
   ],
   "source": [
    "import os\n",
    "import time\n",
    "import urllib.request\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "import sklearn\n",
    "import matplotlib\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.metrics import roc_auc_score, confusion_matrix\n",
    "\n",
    "print(\"numpy\", np.__version__, \"| pandas\", pd.__version__,\n",
    "      \"| scikit-learn\", sklearn.__version__, \"| matplotlib\", matplotlib.__version__)\n",
    "RS = 42\n",
    "\n",
    "os.environ[\"KERAS_BACKEND\"] = \"tensorflow\"   # must be set before importing keras\n",
    "try:\n",
    "    import keras\n",
    "    keras.utils.set_random_seed(RS)          # results may still differ slightly across hardware\n",
    "    print(\"keras\", keras.__version__, \"| backend:\", keras.backend.backend())\n",
    "except ImportError:\n",
    "    keras = None\n",
    "    print(\"Keras is not installed in this environment -> training sections will be skipped.\")\n",
    "    print(\"Run this notebook on Google Colab, or `pip install tensorflow keras` locally.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f1ee9291",
   "metadata": {},
   "source": [
    "下載 PneumoniaMNIST（約 4 MB，與第 9 章同一份資料）。已下載過就直接讀本機檔案；網路失敗時會印出清楚的錯誤訊息。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1bcc3c13",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:12.943347Z",
     "iopub.status.busy": "2026-10-06T13:51:12.942693Z",
     "iopub.status.idle": "2026-10-06T13:51:28.049531Z",
     "shell.execute_reply": "2026-10-06T13:51:28.046407Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "downloading pneumoniamnist (~4 MB) from Zenodo ...\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train images (4708, 28, 28), normal=1214, pneumonia=3494\n",
      "val   images (524, 28, 28), normal=135, pneumonia=389\n",
      "test  images (624, 28, 28), normal=234, pneumonia=390\n"
     ]
    }
   ],
   "source": [
    "DATA_DIR = \"data\"\n",
    "os.makedirs(DATA_DIR, exist_ok=True)\n",
    "\n",
    "\n",
    "def load_medmnist(name, size_mb):\n",
    "    \"\"\"Download a MedMNIST 28x28 .npz from Zenodo (once) and load it with NumPy.\"\"\"\n",
    "    url = f\"https://zenodo.org/records/10519652/files/{name}.npz?download=1\"\n",
    "    path = os.path.join(DATA_DIR, f\"{name}.npz\")\n",
    "    try:\n",
    "        if not os.path.exists(path):\n",
    "            print(f\"downloading {name} (~{size_mb} MB) from Zenodo ...\")\n",
    "            urllib.request.urlretrieve(url, path)\n",
    "        return np.load(path)\n",
    "    except Exception as e:\n",
    "        print(f\"Could not download/load {name}:\", repr(e))\n",
    "        print(\"Check your internet connection or download the file manually from\", url)\n",
    "        return None\n",
    "\n",
    "\n",
    "pneu = load_medmnist(\"pneumoniamnist\", 4)\n",
    "if pneu is not None:\n",
    "    for split in [\"train\", \"val\", \"test\"]:\n",
    "        labels = pneu[f\"{split}_labels\"].ravel()\n",
    "        print(f\"{split:5s} images {pneu[f'{split}_images'].shape}, \"\n",
    "              f\"normal={np.sum(labels == 0)}, pneumonia={np.sum(labels == 1)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "8c4d6182",
   "metadata": {},
   "source": [
    "## 1. 親手做一次卷積\n",
    "\n",
    "卷積（convolution）就是：拿一個 3×3 的小濾鏡（filter，又稱卷積核 kernel），在影像上一格一格滑動；每到一個位置，把濾鏡的 9 個權重和底下 9 個像素**對應相乘再加總**，得到輸出的一個數字。所有位置的輸出排成一張新的圖，叫做特徵圖（feature map）。\n",
    "\n",
    "下面用最直白的雙層迴圈寫出來（實務上套件會用快很多的寫法，但算的是同一件事）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "cc7d88c5",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:28.057215Z",
     "iopub.status.busy": "2026-10-06T13:51:28.056667Z",
     "iopub.status.idle": "2026-10-06T13:51:28.777225Z",
     "shell.execute_reply": "2026-10-06T13:51:28.775495Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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5nhxsCWoHvOYx9wuVss3tS8R1frbiy++uLkc2cjISHP5tKc//ekHLIEntVqt8frXv7659KuWhdKyVDfccMOiy+x9/OMfb5x88snNpSedpete+cpXNpefa9dacutgP53b1LJWOjcdn5Zc07Kiiy37pmWqtOyalvQ8lNZSVwf7aafl8T70oQ81lw/U9dPPBRdccMBShS1atlfXb2pq6pD7RzJ897vfbaYnLel26623Lhpz4403Npef1DJrWgZ6w4YNjcc+9rGNL3/5y7fLy5dddtlBly3U32mZxvbyYrH8q7yvJacVr7ykpeUU01paUsvRaZln/a2W3T7vvPMa3/jGN5ox+l23S+SKluh+97vf3TjrrLOa21RZpGXx3va2tzUmJyf3x83NzTXLCy21qKU1tRSurtti+9ESjTo2ncMpp5zS+MQnPtFcIlzLbHfSsrRaik/b1M8ZZ5zReNnLXtb47W9/Gzz2973vfc08376MXut+HOxH/955/m9961ub10/3WOXh+9///tvtS8evtHLNNdcc8ph0Lw61/87lkrVct/5mxYoVzet/r3vda9ElDC+66KLm32u5YcSr9czbs2dP8BmvZ47yxkknndRML5s2bWq84Q1vOGC5xkPVBTrzvrbtppfvfe97jfvd737N5+jg4GAzD1599dVLPpdrr7228cAHPrC5Pf1b65j0jH7Oc57TfKYrf6nOodjOMstdIreVzpWvdb103VSmahnyj33sYwfEbd26tblUqJ7V2v+rXvWq/Utndu7ngx/84P6y8J73vGdzuVuVXVp+dill3MHoeHSsRyKf67h0bUJay50u9tP5LJDLL7+88bCHPaxZxg4MDDQuvPDCxnXXXXe7ONU1N2/efMDSp1herTyrvPzkJz+5eX+URlUX0HO33WL1Bt1bpSc9b3Xv9Fzs5v2k27R/sDrPwcoeHa/SXSflfaV3lT86Z707vO51r2ts3759f4zy9L3vfe9mzPr165v//u1vf/t25YHeG5S/Oy1WN+r2WUo94/jSo/842g0xSacvFpoZXeNED/UVYrmpm5vGvKmrur6aLif1HtEXHn3ROhr01VdfWd7//vcflf0DSaYvk5qENI5lZ1vUK0VfarTMY/uyfMtBwxQ0F4G+VB2t66cvYYsNlwLwuzk69AVcvfwWG/6yVBpeq7qDeo8cbNhJHNSTVb0z1Mvk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",
      "text/plain": [
       "<Figure size 1100x300 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def conv2d(img, kernel, stride=1, padding=0):\n",
    "    \"\"\"Plain 2D convolution (cross-correlation, as in deep learning libraries).\"\"\"\n",
    "    if padding > 0:\n",
    "        img = np.pad(img, padding)                       # zero padding around the border\n",
    "    k = kernel.shape[0]\n",
    "    out_size = (img.shape[0] - k) // stride + 1\n",
    "    out = np.zeros((out_size, out_size))\n",
    "    for i in range(out_size):\n",
    "        for j in range(out_size):\n",
    "            patch = img[i * stride:i * stride + k, j * stride:j * stride + k]\n",
    "            out[i, j] = np.sum(patch * kernel)           # multiply element-wise, then sum\n",
    "    return out\n",
    "\n",
    "\n",
    "kernels = {\n",
    "    \"vertical edge\": np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]], dtype=float),\n",
    "    \"horizontal edge\": np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]], dtype=float),\n",
    "    \"blur (mean)\": np.ones((3, 3)) / 9,\n",
    "}\n",
    "\n",
    "if pneu is not None:\n",
    "    xray = pneu[\"train_images\"][0].astype(float) / 255.0\n",
    "    fig, axes = plt.subplots(1, 4, figsize=(11, 3))\n",
    "    axes[0].imshow(xray, cmap=\"gray\")\n",
    "    axes[0].set_title(f\"input {xray.shape}\")\n",
    "    for ax, (name, k) in zip(axes[1:], kernels.items()):\n",
    "        fmap = conv2d(xray, k)\n",
    "        ax.imshow(fmap, cmap=\"RdBu_r\" if \"edge\" in name else \"gray\")\n",
    "        ax.set_title(f\"{name} {fmap.shape}\")\n",
    "    for ax in axes:\n",
    "        ax.axis(\"off\")\n",
    "    plt.tight_layout()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "62201f8a",
   "metadata": {},
   "source": [
    "三張特徵圖都是 26×26：3×3 濾鏡在 28×28 的圖上只能放 26 個位置。垂直邊緣濾鏡在「左暗右亮」的地方輸出大正值（紅）、「左亮右暗」輸出負值（藍），所以肋骨、心臟與縱膈的左右邊界會被凸顯；模糊濾鏡則把每格換成鄰居的平均。\n",
    "\n",
    "**重點：CNN 不需要我們手動設計這些濾鏡。** 濾鏡裡的 9 個數字就是權重，會像第 9 章一樣用反向傳播學出來。\n",
    "\n",
    "### 1.1 步幅與填補決定輸出大小\n",
    "輸出邊長 = (n + 2p − k) / s + 1，其中 n 是輸入邊長、k 是濾鏡大小、p 是填補（padding）、s 是步幅（stride）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8acb9e8e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:28.786858Z",
     "iopub.status.busy": "2026-10-06T13:51:28.786507Z",
     "iopub.status.idle": "2026-10-06T13:51:28.822186Z",
     "shell.execute_reply": "2026-10-06T13:51:28.818379Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "stride=1, padding=0 -> output (26, 26)  (formula: 26)\n",
      "stride=1, padding=1 -> output (28, 28)  (formula: 28)\n",
      "stride=2, padding=0 -> output (13, 13)  (formula: 13)\n",
      "stride=2, padding=1 -> output (14, 14)  (formula: 14)\n"
     ]
    }
   ],
   "source": [
    "if pneu is not None:\n",
    "    k = kernels[\"vertical edge\"]\n",
    "    for stride, padding in [(1, 0), (1, 1), (2, 0), (2, 1)]:\n",
    "        out = conv2d(xray, k, stride=stride, padding=padding)\n",
    "        formula = (28 + 2 * padding - 3) // stride + 1\n",
    "        print(f\"stride={stride}, padding={padding} -> output {out.shape}  (formula: {formula})\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1ef3547d",
   "metadata": {},
   "source": [
    "`padding=1` 在外圍補一圈 0，讓輸出維持 28×28（Keras 寫作 `padding=\"same\"`）；`stride=2` 一次跳兩格，輸出邊長大約減半。\n",
    "\n",
    "### 1.2 最大池化：縮小影像、保留最強訊號\n",
    "最大池化（max pooling）把影像切成 2×2 的小格，每格只留最大值，邊長減半。它沒有任何要學的權重。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "55c06fcb",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:28.828212Z",
     "iopub.status.busy": "2026-10-06T13:51:28.826082Z",
     "iopub.status.idle": "2026-10-06T13:51:28.966929Z",
     "shell.execute_reply": "2026-10-06T13:51:28.962182Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjkAAAErCAYAAAA8HZJgAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJUpJREFUeJzt3QeYXFX5x/GzJdlN3U0jIRAICRgwht57E1SkIyCISBFEBCmigvBHpBepilQRKYoC0juCQIBQAyGSRggtBBKy2c1m68zc//M7PjfP7GQ28+7mZrN75vt5ntUw+865Ze49897TtiSKosgBAAAEpnRV7wAAAMDKQJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJJTwMyZM90ee+zhqqqqXElJiXvggQe65pMJTCaTcd/4xjfchRde6EL261//2m211VarejfQDu5ndMacOXN8/f+Xv/xl6Wu//e1v/Wur0ne+8x334x//2IXsv//9rysvL3fvvfdep95PklPAkUce6aZMmeK/nO+44w63+eabu7vvvttdffXVrivtvPPO/oaKf/r06eM23HBDvx9KIDrjRz/6kevfv3+7v9cNrW298cYbeX//3e9+140ePdq0rb/97W/uk08+cT/72c+Wvvb666/7/x4/frzr16+fW2uttdzBBx/sZsyYkbcMHeef/vQnt/HGG/vjHzJkiNt1113dO++84zrj/vvvd4cccogbM2aM69u3rxs3bpw7/fTT3aJFi/LGL1682P3yl79066yzjquoqHBrrLGGO+igg1xDQ8PSmFNOOcXvz0MPPdSpfUL497OuY91b++yzjxs1apS/9vUAcMEFF7impqZOlTlt2jR/bereGDBggFt99dXdXnvt1e69i55v4sSJ7qmnnnK/+tWv2ryua1vX1vDhw339rWQsn3/9619uzz33dCNHjvT12Zprrunrs84mE1JfX+/OPfdc961vfcsNHjx4mcQw28033+x22mknv5/avurVo446yieU2b7+9a/7a/n//u//OrdT+ttVyK+hoUF/1yv6zW9+0+b1vfbaK1p77bW79LTttNNO0Zprrhndcccd/ueqq66KtthiC79/Z511VqfKPPLII6N+/fq1+/vbbrvNl//666/n/X1HzsNGG20UHXfccW1eO/DAA6MRI0ZEJ510UnTzzTdH559/fjR8+HC/T1OmTMm7v+Xl5dHRRx/t46+++mr/2lNPPRV1xpAhQ6IJEyZE55xzji/v5JNPjnr37h2tv/76/rPPtmjRIn8Mes+ZZ54Z3XrrrdEll1ziz8HChQvbxB588MHRDjvs0Kl9Qvj38+LFi/1+bL311tEFF1wQ3XTTTdFRRx0VlZaWRjvvvHOUyWQ6XObpp58eVVdXR8ccc0x04403Rpdddlk0duzYqKysLHr66adXynEUkw8//NB/ZqoTY62trVFjY+Mq26d999032mOPPZZ5XfupenXPPff0/z733HPzvv+8886LDjnkEF+P3XLLLf5aHDNmTNSnT59o8uTJK3Se1lprLX8t556zbCeccIKvv6+44gpfn5599tm+/h86dGj02WeftYl97LHHfFmzZs3q8D6R5CzHRx995E/s5ZdfvtIrxXQ6vdwbRknO+PHj27ymeO3HgAEDolQq1W2TnLfeesuX88wzz7R5feLEiVFzc3Ob12bMmBFVVFREhx9+eJvX77nnHl/G/fffHyXlueeeW+a122+/3W9HSU/uDakvkdmzZxcs9957741KSkqiDz74ILF9RTj3s655Xfv5vnS0f51JSt544w2fPGVbsGBBNGzYsGi77bbrcHkonOSsSl988YV/4FNykm9fZf78+ctNcvKZN2+eL/f444/v1H41NTVFn3/+uf+3vjc6es50Hes9F198cZvXW1paokGDBvkH0o4qyu6qjz76yP30pz/13RNxt8f3vve9Ns1kauJbe+21/b/POOMM3+ymrhl1Gz366KO+jLjrKLvLprm52TfXrbvuur4JTs3RakbW69n0PnXV3HXXXb67RrFPPPFEh46jsrLSbbHFFr4b5csvv2zzuzvvvNNtttlm/vjUbHjooYf67qJVQeOYevfu7Xbcccc2r2+77bb+9WzrrbeePx/vv/9+m9evvPJKt+WWW7r999/fN/cvWbJkhfdLn2UulS/Z21f31W233eaOO+4436Ta0tKyzOeZbffdd/f//+CDD67wPiK8+1nXvK59y7Wn7jXd57n3g7oZBg0a5ObOnev/W/d6btezzsMOO+ywzHvziceXqKv4Bz/4gR+DOGzYMHfOOefoQdjXHfvuu68bOHCgGzFihPv973/f5v26J9SdoP3Qe9UFp20/99xzbeJ0LktLS92zzz7b5nXdWzovhbqes8+zPm+dG23zhRdeWCb27bffdt/+9rf9Puvc7Lbbbu7VV19dJm727Nn+elE9qW7rrbfe2l8T1nOWb/9U56kLUteBrod818Lzzz/vu0t1DGPHjnU33nijeZyP9i+VSi2ta7JZhxDks9pqq/lz0F6XfSE6Xl0fnRXve+72e/Xq5e/VztSp5a4IaSzIyy+/7L/41Q+pylBjPXQSNchJH/IBBxzgqqur3amnnuq+//3v+wFeulF089bW1rpPP/3UXXXVVb68uHLRl6/6Ql966SV/026wwQa+/19xqjxyBy3/+9//dv/4xz/8TTF06NBOXZzxgDjta3afrConjW859thj3fz58911113nkwzd+NmxXUHnWje8LtRCVKF+8cUXvmKI1dXVuddee81/kZ111ln+WNT3q4Tjkksu8ceZlHnz5vn/1+cR0+epsRL6olOftT5HfdbbbLON++Mf/+jHQWRTJa9KS33mun6wcoVyP+e79q655hpfrpKdV155xZWVlfkvQ43F0JgijacoVGZ2eYVojJqOU/eVvkg1Tkhf/tqmxr9deumlPsH4xS9+4R+w4gcX3aO33HKLP7caCKsHr1tvvdUnY7p343vk7LPPdg8//LA75phj/LnU+KEnn3zSj884//zz3UYbbVRwH//zn/+4e+65x5188sn+S/X666/3Y0C0HdUzMnXqVJ9kKcFRUqq6R8ega0LvjycHqK5RwqlxdSpPieHtt9/uP/d77713aeLZEbpeNN5P9ZWO79prr3UHHnig+/jjj335onpY+6yxU+edd55Lp9Pud7/7nU8sLXS9q6w4cV8RixYtcq2trf5a0dg0fZZKCLvKV1995Y9f50fnQPJtX8mskhztnz5Xs6gI5Y63kFdeecU3k/31r39dponS2rytsTLqV3/xxRfbvH7DDTf4crKbqPXfip06dappn9VdpbEiaoLUz7Rp06IzzjjDl6P9ic2ZM8f3w1944YVt3q8xLmqGzH69q7qrNJZI428sdA61TfXR5nZ3aTyM+myvv/766K677oq23HJL3y30+OOPR0nRmAadP3Wbxa688sql29c2tW3tg/ZFTahz585dphz1lW+wwQaJ7RfCup/z2X333aOBAwdGNTU1bV5/8sknffkaM6Hu0v79+0f77bdfwfJeeOEFf39YmvjVpaFtZI+bUxe47l2VoXEbMe2fxm2o/siOze16VpzuEY2hy62LNPbt2GOP9TFrrLFGtPnmm/sxLoVoH/Wjbo3sbsjKyspo//33X/qazo+2kd1lrPtUXfs77rjj0tdOOeUUX172Z6xuv3XWWScaPXq073Zsr7sqPme5+6ftZo8deeedd/zr11133dLX9t5776hv375txp7MnDnT19GWr+Xtt98+2myzzZYbY+2uGjdu3NLzqmtLY2Pi414R1u4qDU+It6869tprr80bd/fdd/uYSZMmdWg/irK7Sk3aMWWwyiT1lK4nvbfeeqvT5f7zn//0T0Hrr7++W7BgwdIfPQFJbtOtRpZr5HhHZlAo09ePtnH55Zf7J47s0et6gtATqFo3svdBTYjqCsrdh66g86umdcvxnXjiib6FRE+uMbXaxOUokz/hhBPcYYcd5pu89TSjp80kaJaNnj41w0rnKnf7ajHTNrVt7YOe5GtqanxrTi4dr847Vr6eej9nu+iii9wzzzzjW1ByW1q1hMXxxx/vn3LVIqXuDbVKLI+6r3WdqrVTLRlWavmNqdVI3Sn67lbLS0z7p64idfNkx8Zdz6p/Fi5c6LtT9P7cz0CtLWq9UMuPWnp0TtV6omnCFqof9FQf06xMdaWpRUgtAvpRS9d+++3nZ07G1Gqic6KWFrUGyGOPPea7wbfffvulcWrJU8udWgTVEthR6kJSS25Ms2DV8hCfL+2fPmvtX3ZLnK5Zda8lWadaqCte3WlqEdP13tjY6Pexqzz++OP+c1AXqD7L9oYixMfb0Xq1KLur9CFefPHF/sP97LPP/E0cU9P1iqzBof7v9pocc8fNqALqCDV/q1lXlcgHH3zgu6XUFaVKL3sfdDzZX9LZLF1GHWFdJyL7HOejplJNE1RXj5qJVWnmfonpfGWvQaPKaO+99/bjj1ShWivJfF588UVfkavSzV3LJ96+tpU97kF999onNR3nO95VvYZGseip93NMXS/qxtH1p+Q5nyuuuMIn+JMnT/bJuMZOtEdfElreQV1G+kJf3jIRufQlk033o+qX3C4vva4v2mxKVPRFpYcVJZvLOy8aF/X3v//ddzEpwetIcpivbvva177mu5xUH4r+rUQsl77EVX9qjJG6xDUWK9+6VooT/T7uAuvsOYy/oPVAFF83umaV1OTK91pn61SrbbbZZum/1eUbH7uuua6wyy67+P9XgqdkVedb12z2ciPZx9vRerUok5yTTjrJV4ha00QfcLzQnz7gzq45I3rvhAkT/CDZfDRosb0nUAuNH8geaLbddtu5TTfd1I9TUb9vvA86FmXH2YlCrCMVXpw86YbMRxVJdoLVHrW2xDd4Pvoi0gWuvmElG7njDOL/1noKuVTZq0JVxa7PsTM02FEtYrq5lGDlJkuFtp/v2PRaR8ZCoPjuZ3n66afdD3/4Q5/g33DDDe3GaQxHnFRpLIvGvuSjAcBq7Xn33Xd9y0ZHv6Dz1Rn5Xsv9ktWDhtbdUuuEEhjdF3qfkk89kOVSq4aSyPh4QmI5XyuqUJ3aWYMGDfItlRp31VVJTja1gG2yySZ++7lJTny8Ha1XizLJ0ReZukOyZwhoYKl1RHl7maQ+IH1hatBUVzzFqxlUMyHUdK2BgHqC0D7oZtLTk55uVkQ8qG369Ol+EF8uDb60VKJq7v/www/z/k7nXS0kKktNuPme6JRkqLtNT+m5NLtEiZYG+HWGKmANAFSlrCbTfElg3DTe3vZ1fLl0vJZBlCje+3nSpEl+YKu6dDRgub2WSCXwWiRN94YGyV522WX+fRr4m5uUKWFSl6rKU/dZV34G6hpSd3n2udJsqlzaTyVE6sJRYqqWHA3oV3JmESdH2VR/aIB53Oqmf6veyqVWJs3uihNU1XHtxcW/T5rqGtVZs2bNWuZ3+V7LR3XOfffd51aGxsbGFWoBTWL7+Wavqk7VZ9fR77WiHJOjTDs3q9aMHWs/ZDwjI5fGweiLUF1K+T64JKY951J/u1oy4qdNVRQ6PvV55x6j/ju3iXl59OWuG1J957kXncaj6Fgtfch6utYqmrll6HxrNodmjWj8Q3azaS7FqYlZT74x9c2qCV9PHrr4O0pdZBrvoPfqqbe9bgk1eyth0bay+4PV7699+uY3v9kmXteGkqd804SRvJ54P6sbTK036oJ+5JFHltsKpBVtNfNE3UG6z/UeJXW595NatNT1pbEV1oQh6daL7M9BSZzu7Vw6BnXx3nTTTX5Gle4TddNZx1qozOxxProHdW/qXtZ+6Ef/1mvZywhoJpW6+jT+Jp6do1l26jLL3k99rto3nefOjrFaHu2fWuRVh8ZLAMQJjlrgLVRXqmUje1xUR32Z090qOl9KkpV4r0waXpCvJUqfhVr28m3/zTff9F2MHW2xL8qWHPVXa/qlTpYuYl3gakWIp/dZvvxVmZx22mn+aSoeG3LEEUf4J6if/OQnflCiupNU0eqpQK/rizTpi0f7rxtViYimjevpUwNxzzzzTH/BqvlYrRzKgrWMtwbUqdUnpgQp38BdTRvVFEg1WapC1XEq0dA5UtP5n//8Z9+SpPIKUT+rKjNN3VTlE9MAX/35A507DVRUk3c2tVLFdDw6h5qKqfOuz07N+9p/PQlmi6fu5i4PnkstOKoklChq7IJ+Yuqayk5eNG1Y/60KUoNA9aWoylpPFbnjKHQtqbLXcWPl62n3s8bKaOyXKnl17eSuyaJ7OE74NX1cSYtaRNQ1Leqa01Ro3e9q1RFN/VWc3qdWjNx7SS0/SuZW5megVhxtR8mb6hvdn/o84oH7cXKn/VZLjs6xaOKEppirvtF5LUStxzp/2VPIRQ92MdVpeiDS/apy1UqmFm8lhvE5i//WnP7kjB7WVJ7qPSWT2n+1lHTm4clC6+HoIUnXlOoPXVd/+MMf/LFp3FUhOsc6Jl3nuXWw7gWNJYr/3MwLL7ywtI7XNR23TqkrVq2UOvfqplILmSZeqE7VAPhs+rzi81JoaQQdh1pR4wROSwZoiYY4Edd9qmtCrWn6Ton/rI+SG13b+r2ukWzaJ31/6LPssKgIadqillHX8tGaMqflrzUlW9NIs6dFtjfltL6+PjrssMP8Crj6ffb0U63MeOmll/rViTU1TlOMNdVPq5nW1tYujdP7TjzxRPM+51vxOPb8888vM1Xwvvvu89MMNUVcP5p+ru1Nnz59aYyONZ66l/ujJeFjmqK9yy67+OmtvXr18tMrTzvttGWmui7Phhtu6Kdn5x5Te9vPd2lqOqimiWo/NIV11113jV577bVl4vS5asn8Qpa3be1bLq1Eq3I1XXXw4MHREUccsXR1z2xaKl3nHl2jp93P8X609xPvc11dnd+XTTfddJnp1aeeeqqfsq6p8oXuZf3Eq+C2J54OrWnH2dpbZiK3PtKforjooov8/uo8bbLJJtEjjzzi3x+fT00z15+i0bR0/ZmUbNdcc43fvlY2X574PN95553Reuutt3Rb+VYv19ITuhZ0TWi6tuqwl19+OW+9ctBBB/nPX/e2lonQvmfryBTyfNdB7rUozz77rN93TTlXfavVi/XnObQPFvvss0+02267LfP68urV57LOk/ZfU/d1TWvq+siRI6NDDz00evfdd5cpU0uAqM611Pk61kLXoZYb+PnPf+6/F+LvFb1P3xH5rlV9B+n9mmbfUSX6n46nRkDH6OlC08PV7L4yFyPUlE89GagLQE87XU1dYBoPpZkjtOQAydJ4H9Ujai0IkVretZBhvnFHuTRJQy16allsbzZtUtSyrfFeWrZkVZ0XffbqjeioohyTg653+OGH+4HR+daUSZK6FdRkvyoSnLjbQM3AJDgAlid31qoSG01+yPfnZvLRZBB1/2d3v60MU6dO9fua+9fOu4q6OPXQqiEPnUFLDgCgRwipJUeLE2qsi2alaQyN/hSJxgxpzOPKbpkpJkU58BgAgFVJEx806Fld3BpArRZoTaIgwUkWLTkAACBIjMkBAABBIskBAABBIskBAADFPfB48ID/rbZZSE39u65YrD3oW6a41uh/K08W0pBaaIrboZdtevSYARWmuOa0bamk2xfcZoprbP7f6paFlJfZ1stJpW1/gwgrXxSlus1pttZJVt297ho/6PDEyqqJPnFJ+t5A27RnK2udZHXLvOsSLY86qefUSbTkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACA4l4MsLm11hWT0tL+BWP6uyGmsuam5priFtW/Z4p7vMy22N66bg9T3KjMKFNccyuL8gEAeg5acgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQHGveFzRq8oUV1o61hS3pOkTU1wUtZjiysuqTXEVvQaZ4pY0fVgwpjaaZyprfNnOpriX3LumuFTatvLwtJp/mOLqqnc0xWUyjS5J5WV9Ez1eFJcB5SMSLa+iamCi5fUusV3fVtb6xmJMtLFL0jUf/y7R8kYa6yQra71vRZ3Uc9CSAwAAgkSSAwAAgkSSAwAAgkSSAwAAgkSSAwAAgkSSAwAAgkSSAwAAgkSSAwAAgkSSAwAAinvFY+vqoqnyJlNcZbltBeXy0r6Jri7alKlNbMXjL+rfMZVVNSDZlVmTtrBhljEyneh2y0orEi0PAIBstOQAAIAgkeQAAIAgkeQAAIAgkeQAAIAgkeQAAIAgkeQAAIAgkeQAAIAgkeQAAIAgkeQAAIDiXvF4qFvLFFdbMt8U16d8kCluVGYdU1ydqzfFTWt+2iWlNbXAFDe15i6XpIF9x5nimlttqzunMrZVqpOWiVpXyXZLS/ub4vpVrl4wZnHDzAT2CJ2xU8UWiZ64hlQm0fI+TNvqQqu3Ft2SWFlzSye5JB0w+MxEy3u47uZEyysvq3Td2YC+6yVWVird6JLU2Pyp68loyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAMW94vH4iuGmuNlNtpUlUy5tihtS3scU91nmY1NcQ/NHrruyrsS7e+UBprh3Kv5rivt48US3KqQzLatku5mMbXXsltbFBWP6VKxZFKuGAkBPREsOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAo7sUAAaA7OXWDukTLu2FGdaLl3f/5X113tc2AHyVa3vrVvRIt78XUOomWt3DJdNedLW6YmVhZRwz/jUvSpJZkz92Mmntdt0xyth5ma/QpX2CrKOpabSsepzKRKW7WokdcTze2ao9EK5Qvvhpli+tVZYpLpZP9Umlp/dJ1Z82t8wrGbFV1gqmsT/tMM8V9tug5UxwAoDC6qwAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJDMiwFuM3SRKa4pbVsMcHqtbdNPNb5piouiFtfTrZYZaYprtK2j6Cpdb1Ncn16DXZIaW+ab4tLpnv+ZNZU0mOJ2rdjWFDdp0BBT3KzaJ0xxmUy9KQ4AQkRLDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAAKO4Vj8eM/soU15iyFTnxi0pT3Jyax1xPN7J6R1Nc/8h2TmbX2VYK/rLEuPJwptUUl8mkbOWll7hiMaf1NVPc2FLbatbj3FhTXEvVjkVz/7RnwwOSvc4W/LZ/ouUlvQr7iKrtEytrWFmyxzq1JtljTUetyZZXRHXSktZMouV9o2S9RMub4boWLTkAACBIJDkAACBIJDkAACBIJDkAACBIJDkAACBIJDkAACBIJDkAACBIJDkAACBIJDkAAKC4Vzzuv6ltNd5RX9Wa4iamX3XdW0nBiBFV25lK2rJ0W1PckrRtlc/33PumuMWZeaa4TGRbybjVvGpo2hWLuoYPTXHTes8xxa1fMtoUt6nbyBQ3x4W74jEAFEJLDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAAKO4Vj0t2mGCKm3evbWXXL2pfcd1ZRa/hBWNGufGmsvqWlZniZkQfmeI+b5hsiutXsZoprm/5YFPc4uhjU1wxiaImU9znrVNNceuUjzLFrV9lW4F8YNM4U1xdw3TX00Q/PSzR8u4/eXfXnW1btkNiZVWWJft8Oyn1XqLl9S+z1V1WC4toFfbnWh5NtLwTh++XaHmzM0e7rkRLDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAACBJJDgAAKO4VjzMTbCseP/BpjQtBn4qhBWNGldlWCq5tbTXF1bkvTXGlpbaPbWDZSFNca9Roikun60xxWFZjywLTafmyrNYUt0m5bcXjMb23M8VN7oErHgNAIbTkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACA4l7xuGRJvSnuzoWvuhCMLt+yYMzwvrbTN2XxElNcn9IqU1x55ThTXFU0zBT3aWaKKQ6dl8o0meI+cVNNcY2p4aa4ceUjTHGTXc9jrZNCYa1vLKYstq2sbVVVYqtrrKiTOm9x06cJfhLONaYSLc7tNHBN15VoyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEW+4vGDz5jiPl70lAvBJpUjC8a0pCNTWV+WzjXFlRk/jr7GlYytWjK2FZnReRnjiseNqa9s5Rm3OyLBVXIBoKehJQcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAATJvBzq5FtLXAj69xlrihvRt3D+N7suZSqrNvOZKa7ElZnihpSubYprdLaVjNOZZlMcOi+TabDFRbZryrjYtutju6R6pHf2edZ1Z+MHHZ5oedW9k6uD55RMdUmqKhmRaHmNqYWJlldMUgmfu1ZjXWPVv4sXYaclBwAABIkkBwAABIkkBwAABIkkBwAABIkkBwAABIkkBwAABIkkBwAABIkkBwAABIkkBwAABMm89uAfple5EKxdubUprsGw8GxVb9tysr1SfU1xCxtnmeKq+440xbU42yq76XSLKQ4r3+KG2aa4j+ttn9nXq3uv4B4BQM9FSw4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AACjuFY8fqH/IdW8liZZW05wpGLN6X1uOWNU4whS30NlWPO4VVZji6t1Xprh0ptkUh66QNkVNid43xW1evpEL1e5v/scVk94JPpKOjsYnV5hzrsk1JlpeS+viRMtD5z26+B2XpJ+tvqHrSrTkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACAIJHkAACA4l7xuKb+Xde9RaaomugTU1xLZnTBmMoyU1FuUGaIKW5B5UhTXIWrNMW1Rg2muHSmyRSH7uOzJa+b4vp18eqiANCd0JIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACCRJIDAACKe8XjxDdcVp1oean0IlPcktb5prh50ZKCMWumBprKGlTaxxQ3IvqaKW5IVGWKs63t7FwmajFGortoapnriv0pJulV2FcbuFWi5X3a8lai5S1JjU2sLGudZFXde0Ci5b1VV59oeei8D2oedEkq7eJV2EOuAwEAQBEjyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEEiyQEAAEFaZSseD+43zhTXmmk0xdXU21Y8bmi2rXj8RubhgjG9avYzlVVZajvNQ6LBprjVKitMcRXN1lVIyXVDVdtasqp3AQBWGb7dAABAkEhyAABAkEhyAABAkEhyAABAkEhyAABAkEhyAABAkEhyAABAkEhyAABAkFbCYoBlpqjqslGmuPrSL01xNaYo51pTtsjW1IKCMa+VPmYqa7XeG5jiyoyLBg5Lr2uKy7i0KS6KUqY49DyfN0YuVBtXH51oeQ0ldYmWN3PxQ4mWd/P8fyZW1uq9J7gkbWSsk6yok8I1LdnbrCBacgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQJBIcgAAQHGveGxdXXSB+8gUVx/ZVjJOR62mOOdKbFElthWZo6jwasG1S2aYyqpdMs0UV1Y2wBQ3pP8PTXENma9McVHUbIpDz/N5g+3+KS+rXun7AgBdjZYcAAAQJJIcAAAQJJIcAAAQJJIcAAAQJJIcAAAQJJIcAAAQJJIcAAAQJJIcAAAQJJIcAABQ3Csej3RDTXF1JfNNcZ83vG2K61XWzxRXWmqLs4qiFkNU4VWROyKdrjPFfVJiW2m5ubXWuOXIhaCkpNIUF0VNrli8HU02xY0YsJnraax1ktVLzRMTLa+srH+i5dUueb9bliUN1XskWl53v0fLywcnWl4qVZNgad27Pn+pfk6Xbo+WHAAAECSSHAAAECSSHAAAECSSHAAAECSSHAAAECSSHAAAECSSHAAAECSSHAAAECSSHAAAECTzisc10RJTXMo1m+KiKGOKa03btlta2tsUl07Xu55uYfMHprjmlHXF4+6txHiZlpX1NcWlUs1BrBxq8VHNE6a4CdVHrPR9AYCuRksOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAIEkkOAAAo8hWPS+eb4lJRkymutKSXKS5yaVNcWYlxxWPXfZWW2lbsbW61rWScybS4YpJK1RTNSsZJm9nwrOtpZpfMSbS8VNpWd1n1Mq7AbZVKcAXz0tIKl6TP699yxSSdqku4xOKpk2Z2cV1DSw4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AAAgSSQ4AACjuFY/TLmWLi1pdkkpcmSmu1JiulZTYDjmK0j18/WQdaxg5bGS89tB5TS1zOX0AghPGtyAAAEAOkhwAABAkkhwAABAkkhwAABAkkhwAABAkkhwAABAkkhwAABAkkhwAABAkkhwAABCkkiiKolW9EwAAAEmjJQcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAAASJJAcAALgQ/T/O5S7X3ZwNZAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 600x300 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def max_pool(img, size=2):\n",
    "    h, w = img.shape[0] // size, img.shape[1] // size\n",
    "    return img[:h * size, :w * size].reshape(h, size, w, size).max(axis=(1, 3))\n",
    "\n",
    "\n",
    "if pneu is not None:\n",
    "    fmap = np.maximum(conv2d(xray, kernels[\"vertical edge\"]), 0)   # ReLU: keep positive responses\n",
    "    pooled = max_pool(fmap)\n",
    "    fig, axes = plt.subplots(1, 2, figsize=(6, 3))\n",
    "    axes[0].imshow(fmap, cmap=\"magma\")\n",
    "    axes[0].set_title(f\"after ReLU {fmap.shape}\")\n",
    "    axes[1].imshow(pooled, cmap=\"magma\")\n",
    "    axes[1].set_title(f\"after 2x2 max pooling {pooled.shape}\")\n",
    "    for ax in axes:\n",
    "        ax.axis(\"off\")\n",
    "    plt.tight_layout()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bccd1fec",
   "metadata": {},
   "source": [
    "池化後只剩 13×13，但邊緣的大致位置仍看得出來。物體稍微平移一兩格，池化後的結果變化不大，這讓 CNN 對小幅位移比較不敏感。\n",
    "\n",
    "## 2. 全連接網路 vs CNN：同一份胸部 X 光\n",
    "\n",
    "先整理資料：全連接網路要把每張圖攤平成 784 個數字；CNN 則保留 28×28 的形狀，再加一個「通道」維度（灰階只有 1 個通道，彩色有 3 個）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "73401995",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:28.983051Z",
     "iopub.status.busy": "2026-10-06T13:51:28.981998Z",
     "iopub.status.idle": "2026-10-06T13:51:29.258292Z",
     "shell.execute_reply": "2026-10-06T13:51:29.251454Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "flattened: (4708, 784) | image-shaped: (4708, 28, 28, 1)\n"
     ]
    }
   ],
   "source": [
    "def prep(split, flat):\n",
    "    X = pneu[f\"{split}_images\"].astype(\"float32\") / 255.0\n",
    "    X = X.reshape(-1, 28 * 28) if flat else X[..., None]          # (n, 784) or (n, 28, 28, 1)\n",
    "    y = pneu[f\"{split}_labels\"].ravel().astype(\"float32\")\n",
    "    return X, y\n",
    "\n",
    "\n",
    "ready = keras is not None and pneu is not None\n",
    "if ready:\n",
    "    Xf_tr, y_tr = prep(\"train\", flat=True)\n",
    "    Xf_va, y_va = prep(\"val\", flat=True)\n",
    "    Xf_te, y_te = prep(\"test\", flat=True)\n",
    "    Xi_tr, _ = prep(\"train\", flat=False)\n",
    "    Xi_va, _ = prep(\"val\", flat=False)\n",
    "    Xi_te, _ = prep(\"test\", flat=False)\n",
    "    print(\"flattened:\", Xf_tr.shape, \"| image-shaped:\", Xi_tr.shape)\n",
    "else:\n",
    "    print(\"Skipped: Keras or the dataset is not available.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "371ed4ce",
   "metadata": {},
   "source": [
    "### 2.1 對照組：第 9 章的全連接網路\n",
    "架構、學習率、早停設定都和第 9 章相同。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e0aeaec8",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:29.267205Z",
     "iopub.status.busy": "2026-10-06T13:51:29.266910Z",
     "iopub.status.idle": "2026-10-06T13:51:44.892348Z",
     "shell.execute_reply": "2026-10-06T13:51:44.890266Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dense: 108,801 parameters, 13 epochs, 15.5 s\n"
     ]
    }
   ],
   "source": [
    "EARLY = dict(monitor=\"val_loss\", patience=5, restore_best_weights=True)\n",
    "\n",
    "if ready:\n",
    "    keras.utils.set_random_seed(RS)\n",
    "    dense = keras.Sequential([\n",
    "        keras.Input(shape=(28 * 28,)),\n",
    "        keras.layers.Dense(128, activation=\"relu\"),\n",
    "        keras.layers.Dropout(0.3),\n",
    "        keras.layers.Dense(64, activation=\"relu\"),\n",
    "        keras.layers.Dense(1, activation=\"sigmoid\"),\n",
    "    ])\n",
    "    dense.compile(optimizer=keras.optimizers.Adam(learning_rate=1e-3),\n",
    "                  loss=\"binary_crossentropy\",\n",
    "                  metrics=[\"accuracy\", keras.metrics.AUC(name=\"auc\")])\n",
    "    t0 = time.time()\n",
    "    hist_dense = dense.fit(Xf_tr, y_tr, validation_data=(Xf_va, y_va),\n",
    "                           epochs=30, batch_size=64, verbose=0,\n",
    "                           callbacks=[keras.callbacks.EarlyStopping(**EARLY)])\n",
    "    print(f\"Dense: {dense.count_params():,} parameters, \"\n",
    "          f\"{len(hist_dense.history['loss'])} epochs, {time.time() - t0:.1f} s\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "436003ab",
   "metadata": {},
   "source": [
    "### 2.2 小型 CNN\n",
    "兩組「卷積 → 池化」，最後攤平接一個 sigmoid 輸出。`Conv2D(16, 3)` 代表 16 個 3×3 濾鏡，會產生 16 張特徵圖。`model.summary()` 會列出每一層的輸出形狀與參數量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "e2f1d161",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:44.913364Z",
     "iopub.status.busy": "2026-10-06T13:51:44.909609Z",
     "iopub.status.idle": "2026-10-06T13:51:45.115718Z",
     "shell.execute_reply": "2026-10-06T13:51:45.113082Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\">Model: \"sequential_1\"</span>\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1mModel: \"sequential_1\"\u001b[0m\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\">┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
       "┃<span style=\"font-weight: bold\"> Layer (type)                    </span>┃<span style=\"font-weight: bold\"> Output Shape           </span>┃<span style=\"font-weight: bold\">       Param # </span>┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
       "│ conv2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">26</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>)     │           <span style=\"color: #00af00; text-decoration-color: #00af00\">160</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>)    │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">13</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">16</span>)     │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Conv2D</span>)               │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">11</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>)     │         <span style=\"color: #00af00; text-decoration-color: #00af00\">4,640</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">MaxPooling2D</span>)  │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">5</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">32</span>)       │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ flatten (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Flatten</span>)               │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">800</span>)            │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dropout_1 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dropout</span>)             │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">800</span>)            │             <span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dense_3 (<span style=\"color: #0087ff; text-decoration-color: #0087ff\">Dense</span>)                 │ (<span style=\"color: #00d7ff; text-decoration-color: #00d7ff\">None</span>, <span style=\"color: #00af00; text-decoration-color: #00af00\">1</span>)              │           <span style=\"color: #00af00; text-decoration-color: #00af00\">801</span> │\n",
       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n",
       "</pre>\n"
      ],
      "text/plain": [
       "┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┓\n",
       "┃\u001b[1m \u001b[0m\u001b[1mLayer (type)                   \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1mOutput Shape          \u001b[0m\u001b[1m \u001b[0m┃\u001b[1m \u001b[0m\u001b[1m      Param #\u001b[0m\u001b[1m \u001b[0m┃\n",
       "┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━┩\n",
       "│ conv2d (\u001b[38;5;33mConv2D\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m26\u001b[0m, \u001b[38;5;34m16\u001b[0m)     │           \u001b[38;5;34m160\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d (\u001b[38;5;33mMaxPooling2D\u001b[0m)    │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m13\u001b[0m, \u001b[38;5;34m16\u001b[0m)     │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ conv2d_1 (\u001b[38;5;33mConv2D\u001b[0m)               │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m11\u001b[0m, \u001b[38;5;34m32\u001b[0m)     │         \u001b[38;5;34m4,640\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ max_pooling2d_1 (\u001b[38;5;33mMaxPooling2D\u001b[0m)  │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m5\u001b[0m, \u001b[38;5;34m32\u001b[0m)       │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ flatten (\u001b[38;5;33mFlatten\u001b[0m)               │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m800\u001b[0m)            │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dropout_1 (\u001b[38;5;33mDropout\u001b[0m)             │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m800\u001b[0m)            │             \u001b[38;5;34m0\u001b[0m │\n",
       "├─────────────────────────────────┼────────────────────────┼───────────────┤\n",
       "│ dense_3 (\u001b[38;5;33mDense\u001b[0m)                 │ (\u001b[38;5;45mNone\u001b[0m, \u001b[38;5;34m1\u001b[0m)              │           \u001b[38;5;34m801\u001b[0m │\n",
       "└─────────────────────────────────┴────────────────────────┴───────────────┘\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Total params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,601</span> (21.88 KB)\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1m Total params: \u001b[0m\u001b[38;5;34m5,601\u001b[0m (21.88 KB)\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">5,601</span> (21.88 KB)\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1m Trainable params: \u001b[0m\u001b[38;5;34m5,601\u001b[0m (21.88 KB)\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/html": [
       "<pre style=\"white-space:pre;overflow-x:auto;line-height:normal;font-family:Menlo,'DejaVu Sans Mono',consolas,'Courier New',monospace\"><span style=\"font-weight: bold\"> Non-trainable params: </span><span style=\"color: #00af00; text-decoration-color: #00af00\">0</span> (0.00 B)\n",
       "</pre>\n"
      ],
      "text/plain": [
       "\u001b[1m Non-trainable params: \u001b[0m\u001b[38;5;34m0\u001b[0m (0.00 B)\n"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Dense parameters: 108,801 | CNN parameters: 5,601 (ratio 19 : 1)\n"
     ]
    }
   ],
   "source": [
    "if ready:\n",
    "    keras.utils.set_random_seed(RS)\n",
    "    cnn = keras.Sequential([\n",
    "        keras.Input(shape=(28, 28, 1)),\n",
    "        keras.layers.Conv2D(16, 3, activation=\"relu\"),   # 16 filters of 3x3 -> 26x26x16\n",
    "        keras.layers.MaxPooling2D(2),                    # -> 13x13x16\n",
    "        keras.layers.Conv2D(32, 3, activation=\"relu\"),   # 32 filters of 3x3x16 -> 11x11x32\n",
    "        keras.layers.MaxPooling2D(2),                    # -> 5x5x32\n",
    "        keras.layers.Flatten(),                          # -> 800 numbers\n",
    "        keras.layers.Dropout(0.3),\n",
    "        keras.layers.Dense(1, activation=\"sigmoid\"),\n",
    "    ])\n",
    "    cnn.compile(optimizer=keras.optimizers.Adam(learning_rate=1e-3),\n",
    "                loss=\"binary_crossentropy\",\n",
    "                metrics=[\"accuracy\", keras.metrics.AUC(name=\"auc\")])\n",
    "    cnn.summary()\n",
    "    print(f\"Dense parameters: {dense.count_params():,} | CNN parameters: {cnn.count_params():,} \"\n",
    "          f\"(ratio {dense.count_params() / cnn.count_params():.0f} : 1)\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6a4137d9",
   "metadata": {},
   "source": "第一個卷積層只有 16 × (3×3 + 1) = 160 個參數：**同一個濾鏡在整張圖上重複使用**（權重共享），參數量跟影像大小無關。全連接網路的第一層光是 784 × 128 + 128 就超過 10 萬個參數。\n\n接著訓練。CNN 每個 epoch 比全連接網路慢（要做很多次滑動相乘），為了控制執行時間，這裡最多訓練 15 個 epoch。"
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "a3366b73",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:51:45.121636Z",
     "iopub.status.busy": "2026-10-06T13:51:45.120655Z",
     "iopub.status.idle": "2026-10-06T13:52:16.054219Z",
     "shell.execute_reply": "2026-10-06T13:52:16.053006Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 8s - 113ms/step - accuracy: 0.7483 - auc: 0.7146 - loss: 0.5278 - val_accuracy: 0.8034 - val_auc: 0.9330 - val_loss: 0.4380\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 2/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 20ms/step - accuracy: 0.8505 - auc: 0.9197 - loss: 0.3456 - val_accuracy: 0.8664 - val_auc: 0.9497 - val_loss: 0.2854\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 3/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 19ms/step - accuracy: 0.8885 - auc: 0.9446 - loss: 0.2672 - val_accuracy: 0.9065 - val_auc: 0.9684 - val_loss: 0.2635\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 4/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 2s - 22ms/step - accuracy: 0.9065 - auc: 0.9597 - loss: 0.2300 - val_accuracy: 0.9198 - val_auc: 0.9732 - val_loss: 0.2128\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 5/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 2s - 24ms/step - accuracy: 0.9125 - auc: 0.9633 - loss: 0.2163 - val_accuracy: 0.9370 - val_auc: 0.9769 - val_loss: 0.1985\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 6/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 20ms/step - accuracy: 0.9174 - auc: 0.9688 - loss: 0.2006 - val_accuracy: 0.9389 - val_auc: 0.9795 - val_loss: 0.1852\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 7/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 2s - 20ms/step - accuracy: 0.9203 - auc: 0.9706 - loss: 0.1919 - val_accuracy: 0.9427 - val_auc: 0.9812 - val_loss: 0.1747\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 8/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 19ms/step - accuracy: 0.9240 - auc: 0.9726 - loss: 0.1862 - val_accuracy: 0.9447 - val_auc: 0.9828 - val_loss: 0.1643\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 9/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 2s - 21ms/step - accuracy: 0.9284 - auc: 0.9745 - loss: 0.1796 - val_accuracy: 0.9485 - val_auc: 0.9843 - val_loss: 0.1580\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 10/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 19ms/step - accuracy: 0.9335 - auc: 0.9769 - loss: 0.1707 - val_accuracy: 0.9561 - val_auc: 0.9848 - val_loss: 0.1511\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 11/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 20ms/step - accuracy: 0.9382 - auc: 0.9792 - loss: 0.1631 - val_accuracy: 0.9580 - val_auc: 0.9861 - val_loss: 0.1467\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 12/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 2s - 22ms/step - accuracy: 0.9371 - auc: 0.9791 - loss: 0.1614 - val_accuracy: 0.9580 - val_auc: 0.9874 - val_loss: 0.1385\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 13/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 20ms/step - accuracy: 0.9405 - auc: 0.9798 - loss: 0.1590 - val_accuracy: 0.9523 - val_auc: 0.9878 - val_loss: 0.1419\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 14/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 2s - 21ms/step - accuracy: 0.9365 - auc: 0.9797 - loss: 0.1588 - val_accuracy: 0.9580 - val_auc: 0.9880 - val_loss: 0.1351\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 15/15\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74/74 - 1s - 19ms/step - accuracy: 0.9422 - auc: 0.9832 - loss: 0.1469 - val_accuracy: 0.9523 - val_auc: 0.9881 - val_loss: 0.1371\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CNN: 15 epochs, 30.9 s\n"
     ]
    }
   ],
   "source": [
    "if ready:\n",
    "    t0 = time.time()\n",
    "    hist_cnn = cnn.fit(Xi_tr, y_tr, validation_data=(Xi_va, y_va),\n",
    "                       epochs=15, batch_size=64, verbose=2,\n",
    "                       callbacks=[keras.callbacks.EarlyStopping(**EARLY)])\n",
    "    print(f\"CNN: {len(hist_cnn.history['loss'])} epochs, {time.time() - t0:.1f} s\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "ef3ce258",
   "metadata": {},
   "source": [
    "### 2.3 學習曲線\n",
    "把兩個模型的驗證 AUC 畫在一起，並看 CNN 自己的訓練與驗證損失有沒有分岔。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "76e5ac2e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:16.058216Z",
     "iopub.status.busy": "2026-10-06T13:52:16.057860Z",
     "iopub.status.idle": "2026-10-06T13:52:16.885021Z",
     "shell.execute_reply": "2026-10-06T13:52:16.882349Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAFUCAYAAAA57l+/AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAAtJFJREFUeJzsnQd4FFUbhc+m955AQk/ovSMdFQURBBvYQFGxYu8NRLH3gqIoilhAfxELCiqKAtJ77xBqGpBK+v7Pdyez2SSbZJNsyk7O+3id2dnZu3Nnlsyc+zWT2Ww2gxBCCCGEEEIIIQ7HxfFdEkIIIYQQQgghhKKbEEIIIYQQQgipRmjpJoQQQgghhBBCqgmKbkIIIYQQQgghpJqg6CaEEEIIIYQQQqoJim5CCCGEEEIIIaSaoOgmhBBCCCGEEEKqCYpuQgghhBBCCCGkmqDoJoQQQgghhBBCqgmKbkKIQ7jpppvQvHlznk1CCCH1gsOHD8NkMuHzzz+3bHv22WfVNnuQ/WR/RzJkyBDVCCF1C4puQpyEAwcO4Pbbb0d0dDS8vLwQEBCA/v3745133sG5c+cs+4nwlRv5PffcU6KPZcuWqff+97//WbbJw4Jskz6PHz9e4jNy8+7YsWM1jowQQgipXi677DL4+PggNTW11H2uv/56eHh4ICkpqU5fjp07dyqxLqK/LvLrr7+q54qoqCjk5+fb3Efenzx5ss335BlF3pdnluLItiuuuAINGzZU1yoiIgKjRo3CggULHD4OQhwJRTchTsCiRYvQqVMnfPvtt+rm8t577+Gll15C06ZN8cgjj+C+++4r8ZlZs2bhxIkTdn9HVlYWXn75ZQcfOSGEEFL7iKCWCeoffvjB5vsZGRn48ccfMXz4cISGhlb6e55++ukiE+HVJbqnTZtmU3T//vvvqtUmX331lTIAnDx5En/99ZfD+p06dSrOP/98bN++XRkhZs6cqZ6B0tLScOWVV+Lrr7922HcR4mgougmp4xw6dAjXXHMNmjVrpm60YtmeNGkS7r77bnzzzTdqW4cOHYp8Rl7n5eVVSER37dq1wkKdEEIIcRZLt7+/f6nCTAR3enq6EudVwc3NTXmO1RZi/ZVWW8g5lHP54IMPolu3bkqAOwKxfj/33HO46qqrsGPHDjXpcPPNNyvR/ffff2Px4sXKA5CQugpFNyF1nFdffVXN4n766aeIjIws8X7Lli1LWLplhnnChAkVEtFPPvlkhYW6PTffhx56CE2aNIGnpyfatGmD119/HWazuch+f/zxBwYMGICgoCD4+fmp/eR4rBHrvkwmiHtgcHAwevbsyVltQgghduHt7a3ckpcuXYr4+PgS74sYF1Eu4vz06dN4+OGHlYeZ3JNEzF1yySXYsmVLud9jK6ZbPMkeeOABhIeHW77j2LFjJT575MgR3HXXXeoeKMcrFverr766iEVbQsJkmyBWX/kua1dsWzHdMt5bbrkFDRo0UBMCXbp0wZw5c2zGp8s9+uOPP0ZMTIy6b/fq1Qvr1q2DvYgngVj65RjFYCBu35mZmagqzzzzDEJCQjB79my4u7uXeH/YsGEYOXJklb+HkOqCopuQOs7PP/+s4rj79etXoc899dRTyM3NtVtEt2jRosJCvSxEWMuDxVtvvaXc9d588031ICGz0jIDriMz1nKjlIcSmcV+44031OdWrlxp2UeO6d5770X79u3x9ttvqxluscyvWbOmysdJCCGkfiBWbLkvSqiWNSKylyxZgssvv1yJ3YMHD2LhwoXq3iT3Lrlvbdu2DYMHD67U/fHWW29V966LL75Y3ZNFNF566aUl9hNx+99//ymx+u677+KOO+5QkwQiosX9XRg0aJC6HwoyOT137lzV2rVrZ/O7RQDL52UfGf9rr72GwMBAlfxUPOdsTT7IPuK+PX36dCXGZbIiJyfHrrGKZVsmAyTmWsYhMfTyHFMV9u3bh927d2PMmDFq0oIQp8RMCKmzJCcni0nYPHr0aLs/06xZM/Oll16q1idOnGj28vIynzhxQr3++++/VX/fffedZf/PPvtMbVu3bp35wIEDZjc3N/O9995reX/w4MHmDh06lPu9N954o/punYULF6p+p0+fXmS/q666ymwymcz79+9Xr9966y21X0JCQql9y/jtOQZCCCGkNHJzc82RkZHmvn37Ftk+c+ZMdR9asmSJep2ZmWnOy8srss+hQ4fMnp6e5ueee67INvmc3Ed1pk6dqrbpbN68Wb2+6667ivR33XXXqe2yv05GRkaJY161apXa74svvrBsk3u4bJN7enHkni1N5+2331b7fvnll5Zt2dnZ6hz4+fmZU1JSiowlNDTUfPr0acu+P/74o9r+888/m8sjLi5OPUPMmjXLsq1fv342n2Gkz7vv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",
      "text/plain": [
       "<Figure size 1000x350 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if ready:\n",
    "    fig, axes = plt.subplots(1, 2, figsize=(10, 3.5))\n",
    "    axes[0].plot(hist_cnn.history[\"loss\"], label=\"CNN train\")\n",
    "    axes[0].plot(hist_cnn.history[\"val_loss\"], label=\"CNN validation\")\n",
    "    axes[0].set_title(\"CNN loss\")\n",
    "    axes[1].plot(hist_dense.history[\"val_auc\"], label=\"Dense (validation)\")\n",
    "    axes[1].plot(hist_cnn.history[\"val_auc\"], label=\"CNN (validation)\")\n",
    "    axes[1].set_title(\"Validation AUC\")\n",
    "    for ax in axes:\n",
    "        ax.set_xlabel(\"epoch\")\n",
    "        ax.legend()\n",
    "        ax.grid(alpha=0.3)\n",
    "    plt.tight_layout()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2673646e",
   "metadata": {},
   "source": [
    "## 3. 在同一份測試集上比較\n",
    "最後才碰測試集（624 張）。除了 AUC，也報告敏感度、特異度，以及「全部猜肺炎」的多數類基準準確率。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "35b9039e",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:16.897275Z",
     "iopub.status.busy": "2026-10-06T13:52:16.894074Z",
     "iopub.status.idle": "2026-10-06T13:52:18.336156Z",
     "shell.execute_reply": "2026-10-06T13:52:18.335178Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              accuracy    AUC  sensitivity  specificity  parameters\n",
      "Dense (ch09)     0.829  0.916        0.982        0.573      108801\n",
      "CNN              0.861  0.929        0.962        0.692        5601\n",
      "majority-class baseline accuracy (always 'pneumonia'): 0.625\n"
     ]
    }
   ],
   "source": [
    "def evaluate(p, y, threshold=0.5):\n",
    "    tn, fp, fn, tp = confusion_matrix(y, (p > threshold).astype(int)).ravel()\n",
    "    return {\"accuracy\": (tp + tn) / len(y), \"AUC\": roc_auc_score(y, p),\n",
    "            \"sensitivity\": tp / (tp + fn), \"specificity\": tn / (tn + fp)}\n",
    "\n",
    "\n",
    "if ready:\n",
    "    p_dense = dense.predict(Xf_te, verbose=0).ravel()\n",
    "    p_cnn = cnn.predict(Xi_te, verbose=0).ravel()\n",
    "    table = pd.DataFrame({\"Dense (ch09)\": evaluate(p_dense, y_te),\n",
    "                          \"CNN\": evaluate(p_cnn, y_te)}).T\n",
    "    table[\"parameters\"] = [dense.count_params(), cnn.count_params()]\n",
    "    print(table.round(3))\n",
    "    print(f\"majority-class baseline accuracy (always 'pneumonia'): {np.mean(y_te == 1):.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a35d8894",
   "metadata": {},
   "source": [
    "兩個模型的 AUC 差距多大才算數？測試集只有 624 張，我們用**配對自助法（paired bootstrap）**：從測試集有放回地重抽 624 張、兩個模型在同一批圖上各算一次 AUC，重複 1,000 次，看差值的分布。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f0a1b6e3",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:18.339600Z",
     "iopub.status.busy": "2026-10-06T13:52:18.339337Z",
     "iopub.status.idle": "2026-10-06T13:52:22.679190Z",
     "shell.execute_reply": "2026-10-06T13:52:22.676624Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC difference (CNN - Dense): 0.013 (bootstrap 95% CI 0.006 to 0.020)\n"
     ]
    }
   ],
   "source": [
    "if ready:\n",
    "    rng = np.random.default_rng(RS)\n",
    "    diffs = []\n",
    "    for _ in range(1000):\n",
    "        idx = rng.integers(0, len(y_te), len(y_te))\n",
    "        if len(np.unique(y_te[idx])) < 2:\n",
    "            continue\n",
    "        diffs.append(roc_auc_score(y_te[idx], p_cnn[idx]) - roc_auc_score(y_te[idx], p_dense[idx]))\n",
    "    lo, hi = np.percentile(diffs, [2.5, 97.5])\n",
    "    print(f\"AUC difference (CNN - Dense): {roc_auc_score(y_te, p_cnn) - roc_auc_score(y_te, p_dense):.3f} \"\n",
    "          f\"(bootstrap 95% CI {lo:.3f} to {hi:.3f})\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3dca8450",
   "metadata": {},
   "source": [
    "解讀時請保守：\n",
    "\n",
    "- 這個信賴區間只反映「測試集抽樣」的不確定性，**沒有包含換一個隨機種子重新訓練的變動**；換種子再訓練一次，差距可能變大或縮小。\n",
    "- 測試集來自單一醫學中心、影像只有 28×28、沒有外部驗證。\n",
    "- 比較合理的結論是：**CNN 用大約 1/20 的參數，在這份測試集上得到相近或略高的 AUC**，而不是「CNN 明顯比較好」。\n",
    "- 兩個模型的特異度都偏低（把不少正常片判成肺炎），閾值 0.5 不一定適合臨床用途。\n",
    "\n",
    "## 4. 打開 CNN 看看：濾鏡與特徵圖\n",
    "第一個卷積層有 16 個 3×3 濾鏡。下面先把學到的權重畫出來，再看同一張 X 光經過這 16 個濾鏡後的特徵圖。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "f64019ea",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:22.683914Z",
     "iopub.status.busy": "2026-10-06T13:52:22.683486Z",
     "iopub.status.idle": "2026-10-06T13:52:23.660595Z",
     "shell.execute_reply": "2026-10-06T13:52:23.658091Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x280 with 16 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if ready:\n",
    "    conv1 = cnn.layers[0]\n",
    "    w = conv1.get_weights()[0]                  # shape (3, 3, 1, 16)\n",
    "    fig, axes = plt.subplots(2, 8, figsize=(10, 2.8))\n",
    "    for i, ax in enumerate(axes.ravel()):\n",
    "        ax.imshow(w[:, :, 0, i], cmap=\"RdBu_r\")\n",
    "        ax.set_title(f\"filter {i}\", fontsize=8)\n",
    "        ax.axis(\"off\")\n",
    "    plt.suptitle(\"Learned 3x3 filters in the first Conv2D layer (red = positive, blue = negative)\")\n",
    "    plt.tight_layout()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "0a310f65",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:23.670254Z",
     "iopub.status.busy": "2026-10-06T13:52:23.669353Z",
     "iopub.status.idle": "2026-10-06T13:52:24.532957Z",
     "shell.execute_reply": "2026-10-06T13:52:24.532251Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1200x300 with 18 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if ready:\n",
    "    sample = Xi_te[y_te == 1][:1]                                  # one pneumonia image from the test set\n",
    "    fmaps = keras.ops.convert_to_numpy(conv1(sample))[0]          # (26, 26, 16)\n",
    "    fig, axes = plt.subplots(2, 9, figsize=(12, 3))\n",
    "    axes[0, 0].imshow(sample[0, :, :, 0], cmap=\"gray\")\n",
    "    axes[0, 0].set_title(\"input\", fontsize=8)\n",
    "    axes[1, 0].axis(\"off\")\n",
    "    for i in range(16):\n",
    "        ax = axes.ravel()[i + 1 + (i >= 8)]\n",
    "        ax.imshow(fmaps[:, :, i], cmap=\"magma\")\n",
    "        ax.set_title(f\"map {i}\", fontsize=8)\n",
    "    for ax in axes.ravel():\n",
    "        ax.set_xticks([])\n",
    "        ax.set_yticks([])\n",
    "    plt.tight_layout()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b76ab510",
   "metadata": {},
   "source": "有些特徵圖凸顯邊緣、有些凸顯整體亮度或某個方向的紋理。第一層學到的多半是這類低階特徵；越往後的層，特徵越抽象、越難用肉眼解讀。\n\n要提醒的是：**「看起來像邊緣偵測」不代表模型的判斷理由就是醫學上合理的**。模型也可能學到與疾病無關的線索（例如影像來源、標記文字），第 13 章會用 Grad-CAM 進一步檢查。\n\n## 5. 練習：多類別 CNN——BloodMNIST 8 種血球（建議開 GPU，可跳過）\nBloodMNIST（CC BY 4.0）是周邊血液抹片的單一細胞彩色影像（28×28×3），共 8 類。和二元分類相比只改兩處：輸出層改成 8 個神經元＋ softmax，損失改成 `sparse_categorical_crossentropy`。\n\n> 這一節要下載約 35 MB，訓練也是本 notebook 最久的部分。Colab 免費 CPU 若太慢，可以開 GPU，或把 `RUN_BLOOD` 改成 `False` 跳過。"
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "faf92178",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:24.535308Z",
     "iopub.status.busy": "2026-10-06T13:52:24.535117Z",
     "iopub.status.idle": "2026-10-06T13:52:25.188576Z",
     "shell.execute_reply": "2026-10-06T13:52:25.187474Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train (11959, 28, 28, 3) | test (3421, 28, 28, 3)\n",
      "basophil           852\n",
      "eosinophil        2181\n",
      "erythroblast      1085\n",
      "immature gran.    2026\n",
      "lymphocyte         849\n",
      "monocyte           993\n",
      "neutrophil        2330\n",
      "platelet          1643\n",
      "Name: train count, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "RUN_BLOOD = True\n",
    "BLOOD_CLASSES = [\"basophil\", \"eosinophil\", \"erythroblast\", \"immature gran.\",\n",
    "                 \"lymphocyte\", \"monocyte\", \"neutrophil\", \"platelet\"]\n",
    "\n",
    "blood = load_medmnist(\"bloodmnist\", 35) if (RUN_BLOOD and keras is not None) else None\n",
    "if blood is not None:\n",
    "    Xb_tr = blood[\"train_images\"].astype(\"float32\") / 255.0\n",
    "    yb_tr = blood[\"train_labels\"].ravel()\n",
    "    Xb_va = blood[\"val_images\"].astype(\"float32\") / 255.0\n",
    "    yb_va = blood[\"val_labels\"].ravel()\n",
    "    Xb_te = blood[\"test_images\"].astype(\"float32\") / 255.0\n",
    "    yb_te = blood[\"test_labels\"].ravel()\n",
    "    print(\"train\", Xb_tr.shape, \"| test\", Xb_te.shape)\n",
    "    print(pd.Series(np.bincount(yb_tr), index=BLOOD_CLASSES, name=\"train count\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "67bdf481",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:25.190673Z",
     "iopub.status.busy": "2026-10-06T13:52:25.190494Z",
     "iopub.status.idle": "2026-10-06T13:52:42.576692Z",
     "shell.execute_reply": "2026-10-06T13:52:42.575329Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "94/94 - 5s - 56ms/step - accuracy: 0.4333 - loss: 1.5617 - val_accuracy: 0.7050 - val_loss: 0.9649\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 2/5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "94/94 - 3s - 30ms/step - accuracy: 0.6642 - loss: 0.9413 - val_accuracy: 0.7447 - val_loss: 0.7619\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 3/5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "94/94 - 3s - 33ms/step - accuracy: 0.7210 - loss: 0.7869 - val_accuracy: 0.7699 - val_loss: 0.6588\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 4/5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "94/94 - 3s - 31ms/step - accuracy: 0.7531 - loss: 0.7110 - val_accuracy: 0.7874 - val_loss: 0.5998\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 5/5\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "94/94 - 3s - 33ms/step - accuracy: 0.7707 - loss: 0.6574 - val_accuracy: 0.8002 - val_loss: 0.5580\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "BloodMNIST CNN: 11,496 parameters, 17.3 s\n"
     ]
    }
   ],
   "source": [
    "if blood is not None:\n",
    "    keras.utils.set_random_seed(RS)\n",
    "    blood_cnn = keras.Sequential([\n",
    "        keras.Input(shape=(28, 28, 3)),                  # 3 color channels\n",
    "        keras.layers.Conv2D(16, 3, activation=\"relu\"),\n",
    "        keras.layers.MaxPooling2D(2),\n",
    "        keras.layers.Conv2D(32, 3, activation=\"relu\"),\n",
    "        keras.layers.MaxPooling2D(2),\n",
    "        keras.layers.Flatten(),\n",
    "        keras.layers.Dropout(0.3),\n",
    "        keras.layers.Dense(8, activation=\"softmax\"),     # one probability per class, summing to 1\n",
    "    ])\n",
    "    blood_cnn.compile(optimizer=keras.optimizers.Adam(learning_rate=1e-3),\n",
    "                      loss=\"sparse_categorical_crossentropy\", metrics=[\"accuracy\"])\n",
    "    t0 = time.time()\n",
    "    hist_blood = blood_cnn.fit(Xb_tr, yb_tr, validation_data=(Xb_va, yb_va),\n",
    "                               epochs=5, batch_size=128, verbose=2)\n",
    "    print(f\"BloodMNIST CNN: {blood_cnn.count_params():,} parameters, {time.time() - t0:.1f} s\")\n",
    "else:\n",
    "    print(\"Skipped BloodMNIST section.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f32d9a8d",
   "metadata": {},
   "source": [
    "用混淆矩陣看哪些細胞最容易被搞混。每一列是真實類別、每一行是預測類別，對角線是答對的數量。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "c66b70e9",
   "metadata": {
    "execution": {
     "iopub.execute_input": "2026-10-06T13:52:42.580411Z",
     "iopub.status.busy": "2026-10-06T13:52:42.580121Z",
     "iopub.status.idle": "2026-10-06T13:52:44.008378Z",
     "shell.execute_reply": "2026-10-06T13:52:44.006778Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test accuracy: 0.793 | majority-class baseline: 0.195\n",
      "softmax output of the first test image (sums to 1): [0.032 0.001 0.002 0.742 0.002 0.219 0.002 0.   ] sum = 1.0\n"
     ]
    },
    {
     "data": {
      "image/png": "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JkiQ4F+vieJ6FPkWTx137txBSEgI4sWLhyhRooTLe168eBFp0qTBkSNHED9+fNiOyqv6VVvQvRZZ/QKllqIcEBCAqFH/3UMli/kZhQ0jderUEfLebMy+IMwOKq/qV21B91pk9AsPs5QdFFgSQgghLELCLIQQQliEhFmEGzFixECvXr3M/76Ayqv6VVvQvWZjv6DkLyGEEMIiZDELIYQQFiFhFkIIISxCwiyEEEJYhIRZCCGEsAgJs3hkjh8/jn379vlMjR07dgzr16/3djGEeKr5888/8csvv8BXcPnAYpcSZvFI3Lx5E8OGDcMbb7yBP/74wyeWHB03bhy6deuG1atXw3auXbtmBhJk586dOHz4sLeL9FThC52xr5Z38+bNqFevHn766SfYzt9//42jR4+ax9u3b8fWrVthI1qSUzyUc+fOIWHChKhbty5u3LiBnj174uOPP0aWLFmsrL2//voLcePGdZf3s88+Q/fu3VGsWDHYOoigZb9q1SqzVOrcuXPx7bffwlcEJLzWWo/oMv7222/YsGEDbt26hebNmyNVqlSwubxLliwxg2AO2l577TXr1gc4dOgQnnvuObz00ku4ffs22rZta9py48aNYSvr1q3DrFmzkDhxYnz//feYOXMmrISbWAjxIM6dO+fq2bOn69ixY+b5nj17XB06dHC99NJL5rFtXLhwwfXBBx+4Dh48aJ6HhISY8teoUcO1cuVKl63s37/fVblyZVeCBAlcw4YNc5+/c+eOyxacshw9etR16dIl161bt8xz/m9TOe/HzJkzXfnz53f9/PPPrsDAQFeTJk2sLrNT3u+//96VMWNGc8/ZBH/z/v37uzZs2OC6ceOGOTdu3DhXwoQJXRMmTHDZzIsvvuiKGTOma+jQoe5ztrUFubLFvxI7dmy0a9fOWBlDhw5FxowZjTs7ZcqUeO+996xza3PReZaPlidX76HlzOeBgYHo16+fdW5tx2XJDUXKli2L8uXLm5jd8uXLzXlaTnS/2QDLQmu+VKlSaNOmDTp37ozr168jWrRo5rU1a9Zg3rx5sDE34ptvvsH8+fMRPXp000boRWGZaY3aBsMYDBstWLDA3H/+/v7G48O2YouLm795p06dTNnYHph78vLLL+OLL74w95vNbu3atWujQYMGxkNFLwrvL7YF7iplCxJm8UDYCbAj4803e/ZsLF26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",
      "text/plain": [
       "<Figure size 600x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "basophil          0.451\n",
      "eosinophil        0.947\n",
      "erythroblast      0.730\n",
      "immature gran.    0.822\n",
      "lymphocyte        0.811\n",
      "monocyte          0.187\n",
      "neutrophil        0.901\n",
      "platelet          0.974\n",
      "Name: per-class sensitivity (recall), dtype: float64\n"
     ]
    }
   ],
   "source": [
    "if blood is not None:\n",
    "    pb = blood_cnn.predict(Xb_te, verbose=0)\n",
    "    pred_b = pb.argmax(axis=1)\n",
    "    print(f\"test accuracy: {np.mean(pred_b == yb_te):.3f} | \"\n",
    "          f\"majority-class baseline: {np.bincount(yb_te).max() / len(yb_te):.3f}\")\n",
    "    print(\"softmax output of the first test image (sums to 1):\", pb[0].round(3), \"sum =\", round(float(pb[0].sum()), 3))\n",
    "    cm = confusion_matrix(yb_te, pred_b)\n",
    "    fig, ax = plt.subplots(figsize=(6, 5))\n",
    "    ax.imshow(cm, cmap=\"Blues\")\n",
    "    ax.set_xticks(range(8), BLOOD_CLASSES, rotation=45, ha=\"right\", fontsize=8)\n",
    "    ax.set_yticks(range(8), BLOOD_CLASSES, fontsize=8)\n",
    "    for i in range(8):\n",
    "        for j in range(8):\n",
    "            ax.text(j, i, cm[i, j], ha=\"center\", va=\"center\", fontsize=7,\n",
    "                    color=\"white\" if cm[i, j] > cm.max() / 2 else \"black\")\n",
    "    ax.set_xlabel(\"predicted\")\n",
    "    ax.set_ylabel(\"true\")\n",
    "    ax.set_title(\"BloodMNIST confusion matrix (test set)\")\n",
    "    plt.tight_layout()\n",
    "    plt.show()\n",
    "    recall = cm.diagonal() / cm.sum(axis=1)\n",
    "    print(pd.Series(recall, index=BLOOD_CLASSES, name=\"per-class sensitivity (recall)\").round(3))"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "55fb54d3",
   "metadata": {},
   "source": "只訓練 5 個 epoch 的小 CNN 就有不錯的整體準確率，但各類別差異很大：在我們的實測中，血小板、嗜酸性球、嗜中性球的敏感度都在 0.9 左右或更高，單核球（monocyte）卻不到 0.2、嗜鹼性球（basophil）不到 0.5，常被判成未成熟顆粒球等其他白血球（你的數字會因版本與硬體略有不同）。整體準確率會掩蓋這種「某幾類特別差」的情況，所以多類別問題要看混淆矩陣與各類別的敏感度。同樣地，這是 28×28 小圖、單一來源的教學結果，不能推論到實際血液抹片判讀。\n\n## 6. 動手試試\n1. 第 1 節：自己設計一個 3×3 濾鏡（例如對角線邊緣 `[[0,1,2],[-1,0,1],[-2,-1,0]]`），看看特徵圖凸顯了什麼。\n2. 第 2.2 節：把 `Conv2D(16, 3)` 改成 `Conv2D(4, 3)` 或 `Conv2D(64, 3)`，比較參數量與測試 AUC；再試著把 `MaxPooling2D` 拿掉，參數量會怎麼變？為什麼？\n3. 第 3 節：把 `evaluate` 的 `threshold` 從 0.5 改成 0.8，CNN 的敏感度與特異度如何交換？\n4. 第 5 節：把 `epochs` 改成 15、加上 EarlyStopping，看哪幾類細胞進步最多。"
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
