0.3 TensorFlow 專案標準流程
TensorFlow 專案不只是把模型訓練起來。完整流程應該包含資料載入、資料切分、前處理、建模、編譯、訓練、評估、推論、儲存與再次載入。這篇先建立全系列會反覆使用的標準工作流。
這篇使用 Breast Cancer 二元分類資料集作為範例。資料本身不複雜,因此可以把重點放在流程:資料如何進入模型、模型如何訓練、如何評估結果,以及如何把訓練好的模型保存下來。
1. 學習目標
許多初學者可以把 model.fit() 跑起來,但不一定清楚整個專案流程應該如何組織。這篇用一個二元分類範例示範標準順序,後續 DNN、CNN、NLP、時間序列任務都會沿用同樣概念。
2. TensorFlow 專案的基本流程
定義任務
→ 載入資料
→ 切分 train / validation / test
→ 前處理資料
→ 建立模型
→ compile
→ fit
→ evaluate
→ predict
→ save / load
每一步都應該能被重複執行,也應該能清楚知道輸入與輸出是什麼。
3. 資料切分要先想清楚
常見資料切分包含:
| 資料集 | 用途 |
|---|---|
| Training set | 更新模型權重 |
| Validation set | 訓練過程中觀察模型表現與調整超參數 |
| Test set | 最後評估模型泛化能力 |
測試集不應該被拿來反覆調參,否則會讓測試分數失去代表性。
4. 前處理只能 fit 在訓練集
標準化、正規化、類別編碼等前處理若需要從資料估計參數,應該只用訓練集 fit,再套用到 validation/test。
這樣可以避免測試資料資訊提前洩漏到訓練流程中。
5. 建模時先確認輸入與輸出
建立 Keras 模型前,先回答兩個問題:
- 輸入 shape 是什麼?
- 輸出層應該有幾個神經元、使用什麼 activation?
例如二元分類常見設定是:
多類別分類常見設定是:
6. 編譯模型時對齊任務
compile() 的 loss 與 metrics 必須對齊任務。
| 任務 | 輸出層 | 常用 loss | 常用 metrics |
|---|---|---|---|
| 回歸 | 1 個線性輸出 | mse、mae |
mae、rmse |
| 二元分類 | 1 個 sigmoid | binary_crossentropy |
accuracy、AUC |
| 多類別分類 | softmax | sparse_categorical_crossentropy |
accuracy |
| 多標籤分類 | 多個 sigmoid | binary_crossentropy |
AUC、自訂指標 |
7. 評估不只看一個數字
分類任務除了 accuracy,也應該視情況觀察 confusion matrix、precision、recall、F1-score 或 AUC。若資料不平衡,只看 accuracy 可能會誤判模型品質。
8. 儲存與載入模型
模型訓練完成後,建議存成 .keras 格式:
這可以讓後續推論、部署或重新評估時不用重新訓練模型。
9. 如何套用到自己的專案?
套用時可以保留同一個流程,只替換以下部分:
- 資料載入方式。
- 前處理方法。
- 輸入 shape。
- 輸出層與 loss function。
- 評估指標。
- 模型儲存路徑。
例如原本範例是二元分類,因此輸出層使用 sigmoid,loss 使用 binary_crossentropy。如果改成迴歸任務,輸出層就應改成 1 個線性神經元,loss 可改成 mse。如果改成多類別分類,輸出層通常改成 softmax,loss 則依標籤格式選擇 sparse_categorical_crossentropy 或 categorical_crossentropy。
10. 小結
TensorFlow 專案的核心不是單一模型架構,而是一套清楚的工程流程。先把資料、訓練、評估與儲存流程建立穩,後續更換 DNN、CNN、RNN 或 Transformer 都會更容易。
後續章節會把這套流程套用到不同任務。讀者可以把本篇當成總模板:每次開始新任務時,先確認資料與任務型態,再決定輸出層、loss、metrics 與評估方式。