跳轉到

0.3 TensorFlow 專案標準流程

範例程式:Open In Colab

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。

scaler.fit(x_train)
x_train = scaler.transform(x_train)
x_test = scaler.transform(x_test)

這樣可以避免測試資料資訊提前洩漏到訓練流程中。

5. 建模時先確認輸入與輸出

建立 Keras 模型前,先回答兩個問題:

  1. 輸入 shape 是什麼?
  2. 輸出層應該有幾個神經元、使用什麼 activation?

例如二元分類常見設定是:

tf.keras.layers.Dense(1, activation='sigmoid')

多類別分類常見設定是:

tf.keras.layers.Dense(num_classes, activation='softmax')

6. 編譯模型時對齊任務

compile() 的 loss 與 metrics 必須對齊任務。

任務 輸出層 常用 loss 常用 metrics
回歸 1 個線性輸出 msemae maermse
二元分類 1 個 sigmoid binary_crossentropy accuracyAUC
多類別分類 softmax sparse_categorical_crossentropy accuracy
多標籤分類 多個 sigmoid binary_crossentropy AUC、自訂指標

7. 評估不只看一個數字

分類任務除了 accuracy,也應該視情況觀察 confusion matrix、precision、recall、F1-score 或 AUC。若資料不平衡,只看 accuracy 可能會誤判模型品質。

8. 儲存與載入模型

模型訓練完成後,建議存成 .keras 格式:

model.save('model.keras')
loaded_model = tf.keras.models.load_model('model.keras')

這可以讓後續推論、部署或重新評估時不用重新訓練模型。

9. 如何套用到自己的專案?

套用時可以保留同一個流程,只替換以下部分:

  1. 資料載入方式。
  2. 前處理方法。
  3. 輸入 shape。
  4. 輸出層與 loss function。
  5. 評估指標。
  6. 模型儲存路徑。

例如原本範例是二元分類,因此輸出層使用 sigmoid,loss 使用 binary_crossentropy。如果改成迴歸任務,輸出層就應改成 1 個線性神經元,loss 可改成 mse。如果改成多類別分類,輸出層通常改成 softmax,loss 則依標籤格式選擇 sparse_categorical_crossentropycategorical_crossentropy

10. 小結

TensorFlow 專案的核心不是單一模型架構,而是一套清楚的工程流程。先把資料、訓練、評估與儲存流程建立穩,後續更換 DNN、CNN、RNN 或 Transformer 都會更容易。

後續章節會把這套流程套用到不同任務。讀者可以把本篇當成總模板:每次開始新任務時,先確認資料與任務型態,再決定輸出層、loss、metrics 與評估方式。