Keras `model.fit()` 是訓練模型的主要方法,負責把輸入資料、標籤、批次大小、訓練輪數、驗證資料與 callback 串成一次訓練流程。實務上先把 `x`、`y`、`batch_size`、`epochs`、`validation_data` 與 `callbacks` 設清楚,再用 `model.summary()` 檢查模型結構,會比一開始就調很多超參數穩得多。
model.fit() 是做什麼用的?
Keras `model.fit()` 會依指定的 epoch 數訓練模型,並在每個 batch 中計算 loss、反向傳播與更新權重。`fit()` 回傳的 `History` 物件可用來查看每輪訓練與驗證指標。
Keras 官方文件將 `fit()` 定義為用固定 epoch 數訓練模型的方法;`x` 可接受 NumPy array、tensor、`tf.data.Dataset`、`PyDataset`、PyTorch `DataLoader` 或 Python generator(Keras,存取日期:2026-08-28)。TensorFlow 的 `tf.keras.Model.fit` 也維持相同訓練流程概念(TensorFlow,存取日期:2026-08-28)。
我當時的筆記先從 `fit()` 參數表開始,這段範例保留了當時 TensorFlow/Keras 常見的 signature。若使用 Keras 3,`max_queue_size`、`workers`、`use_multiprocessing` 已不在新版 Keras 文件的主要 `fit()` signature 中;維護舊專案時要以專案實際 TensorFlow/Keras 版本文件為準。
```python
fit(
x=None,
y=None,
batch_size=None,
epochs=1,
verbose='auto',
callbacks=None,
validation_split=0.0,
validation_data=None,
shuffle=True,
class_weight=None,
sample_weight=None,
initial_epoch=0,
steps_per_epoch=None,
validation_steps=None,
validation_batch_size=None,
validation_freq=1,
max_queue_size=10,
workers=1,
use_multiprocessing=False
)
```
在使用 `model.fit()` 之前,可以先用下列指令查看模型資訊:
```python
model.summary()
```
model.fit() 常用參數怎麼設定?
Keras `model.fit()` 最常調整的是資料輸入、批次大小、訓練輪數與驗證資料。初學時不需要一次記完整份 API,先看懂訓練資料如何被切成 batch,再補 callbacks 與 sample weights。
| 參數 | 用途 | 實務設定方式 |
|---|---|---|
| `x` | 訓練輸入資料 | NumPy array、tensor、`tf.data.Dataset` 或 generator |
| `y` | 訓練標籤 | 若 `x` 已是 dataset 並產生 `(inputs, targets)`,通常不另外傳 `y` |
| `batch_size` | 每次權重更新使用的樣本數 | NumPy/tensor 輸入常設 16、32、64 起試;dataset 已 batch 時不要重複設定 |
| `epochs` | 訓練資料完整看過幾輪 | 先用小數值確認流程,再依 validation 指標決定是否增加 |
| `validation_split` | 從訓練資料切出驗證比例 | 只支援 NumPy array 或 tensor,且會取訓練資料尾端樣本 |
| `validation_data` | 明確指定驗證資料 | 有固定驗證集時優先使用,且會覆蓋 `validation_split` |
| `callbacks` | 訓練中自動執行的控制邏輯 | 常見如 EarlyStopping、ModelCheckpoint、TensorBoard |
| `shuffle` | 每個 epoch 前是否打亂資料 | 分類訓練多半開啟;時間序列資料要特別小心 |
一個基本訓練範例如下:
```python
history = model.fit(
x_train,
y_train,
batch_size=32,
epochs=20,
validation_split=0.2,
callbacks=[
tf.keras.callbacks.EarlyStopping(
monitor="val_loss",
patience=3,
restore_best_weights=True,
)
],
)
```
batch_size 會影響什麼?
`batch_size` 是每次拿來計算梯度並更新權重的訓練樣本數。較大的 batch 通常運算效率較好但更吃記憶體;較小的 batch 記憶體壓力較低,但梯度波動可能變大。
Batch size 是在訓練神經網路時,一次輸入給模型的訓練樣本數量。批量大小會影響訓練速度和效果,也決定模型在訓練過程中每次更新權重時使用多少樣本。
在訓練神經網路時,每一次將一個批次的訓練資料輸入模型,並根據輸出調整模型參數的過程,稱為一次 iteration。假設訓練集有 1,000 筆資料,`batch_size=100`,模型會用 10 次 iteration 跑完一個 epoch。
批量大小需要平衡硬體與訓練穩定性。批量太小時,梯度可能波動較大;批量太大時,記憶體需求會上升,也可能讓模型更新次數變少。Keras 文件也提醒,如果輸入資料已經是 `tf.data.Dataset`、`PyDataset`、`DataLoader` 或 generator,通常不要再傳 `batch_size`,因為資料來源本身已經產生 batch(Keras,存取日期:2026-08-28)。
什麼是更新權重?
更新權重是神經網路用訓練資料修正模型參數的過程。模型先計算預測與標籤之間的 loss,再透過反向傳播與 optimizer 調整權重,讓下一次預測更接近目標。
在神經網路中,權重是用於計算網路輸出的參數。每個神經元都有自己的權重,這些權重決定該神經元對輸出的貢獻。
訓練神經網路時,模型會根據輸入和預期輸出計算損失,然後使用反向傳播演算法調整權重,使損失逐步降低。嚴格來說,權重是模型透過訓練學到的參數;`learning_rate`、`batch_size`、正則化強度與 `epochs` 才是開發者預先設定的超參數。
這篇筆記保留「權重更新」這個核心概念,並補上一個實務判斷:如果 loss 完全不下降,先檢查資料 shape、標籤格式、loss function 與 learning rate,再去懷疑模型層數不夠。
epochs 要設多少?
`epochs` 代表模型完整看過訓練資料幾輪。epoch 不是 batch 次數;總更新次數通常接近「樣本數除以 batch_size,再乘上 epoch 數」。
Epoch 是指訓練過程中對整個訓練資料集進行一次完整的訓練循環。例如,假設有 1,000 個樣本的訓練資料集,批量大小為 100,就需要 10 次 iteration 才能完成一個 epoch。
在訓練神經網路時,通常會進行多個 epoch,以提高模型精度。在每個 epoch 中,模型會看過所有訓練資料,並根據輸出調整模型參數。許多情況下,經過足夠多的 epoch 後,模型的精度會趨於穩定,繼續訓練不一定有幫助。
實務上我會先設一個偏高但可接受的 `epochs`,再搭配 `EarlyStopping` 讓模型在 validation loss 停止改善時自動停下來。這比手動猜 5、10、50 哪個剛好更可靠。
validation_split 和 validation_data 怎麼選?
`validation_data` 適合已經切好驗證集的專案;`validation_split` 適合 NumPy array 或 tensor 的快速實驗。兩者同時設定時,Keras 會使用 `validation_data`。
`validation_split` 會從傳入的訓練資料切出一部分做驗證,模型不會用這部分資料訓練,只會在每個 epoch 結束時評估 loss 與 metrics。Keras 文件中特別指出,`validation_split` 取的是 `x` 與 `y` 尾端樣本,而且是在 shuffle 前切出;如果資料原本依類別或時間排序,直接使用可能造成驗證集偏掉(Keras,存取日期:2026-08-28)。
我會這樣選:
| 情境 | 建議 |
|---|---|
| 快速確認程式能跑 | 用 `validation_split=0.2` |
| 正式實驗或可重現訓練 | 先切好 `x_val, y_val`,再用 `validation_data=(x_val, y_val)` |
| 使用 `tf.data.Dataset` | 在 dataset pipeline 內切 train/validation,不用 `validation_split` |
| 時間序列資料 | 依時間切驗證集,避免隨機切分造成資料洩漏 |
分類模型的 activation 和 loss 要怎麼搭?
分類模型常見搭配是二元分類用 sigmoid,單標籤多分類用 softmax,多標籤分類用 sigmoid。activation、標籤格式與 loss function 三者要一起檢查。
我當時的筆記寫到「label 單類別最後使用 softmax,多類別用 sigmoid」。更精確地說,若每筆資料只屬於一個類別,輸出層通常用 `softmax`;若每筆資料可同時屬於多個類別,輸出層通常用 `sigmoid`。
| 任務 | 輸出層 | 常見 loss |
|---|---|---|
| 二元分類 | `Dense(1, activation="sigmoid")` | `binary_crossentropy` |
| 單標籤多分類,標籤是整數 | `Dense(num_classes, activation="softmax")` | `sparse_categorical_crossentropy` |
| 單標籤多分類,標籤是 one-hot | `Dense(num_classes, activation="softmax")` | `categorical_crossentropy` |
| 多標籤分類 | `Dense(num_labels, activation="sigmoid")` | `binary_crossentropy` |
Keras `compile()` 文件說明,loss function 會比較 `y_true` 與 `y_pred`,而 sparse loss 期待整數標籤格式(Keras,存取日期:2026-08-28)。所以模型無法收斂時,不要只看 `fit()` 參數,也要回頭檢查 `compile()`。
model.fit() 參數設定檢查表
Keras `model.fit()` 出錯時,通常不是某個參數背不起來,而是資料、標籤、loss、batch 與 validation 沒對齊。訓練前照這份清單掃一次,可以少掉很多重跑。
- 用 `model.summary()` 確認輸入 shape、輸出 shape 與參數量。
- 確認 `x_train` 第一維是樣本數,且與 `y_train` 第一維一致。
- 確認最後一層 activation 與 loss function 對應分類型態。
- 使用 NumPy array 或 tensor 時,再設定 `batch_size`;dataset 已 batch 時不要重複指定。
- 優先準備固定 `validation_data`,快速實驗才用 `validation_split`。
- 需要自動停止、存檔或看 TensorBoard 時,把邏輯放進 `callbacks`。
- 訓練結果怪異時,先看 loss 是否下降,再看 validation loss 是否和 training loss 分開。
延伸閱讀
Keras `model.fit()` 只是訓練流程的一段。若要把模型訓練、摘要、預測與效能觀察串起來,可以接著看這幾篇站內筆記:
- Keras 介紹:用 Python 快速建立深度學習模型的高階 API
- Keras 建立模型並預測資料:從 Sequential 到 model.predict 的完整流程
- Keras model.summary 參數量怎麼算?Dense、Conv2D 與 BatchNormalization Param 計算
- TensorBoard 監控模型表現:訓練指標、視覺化與除錯流程
- TensorFlow Dense 全連接層介紹:公式、用途與 Fashion MNIST 範例
常見問題
model.fit() 的 batch_size 預設是多少?
Keras 文件說明,未指定 `batch_size` 時通常預設為 32。若 `x` 是 `tf.data.Dataset`、`PyDataset`、`DataLoader` 或 generator,資料來源本身應產生 batch,通常不要再傳 `batch_size`。
epochs 越多模型就越準嗎?
`epochs` 越多不一定越準。訓練輪數太少可能欠擬合,訓練輪數太多可能過擬合;建議搭配 validation loss 與 `EarlyStopping` 判斷何時停止。
validation_split 可以取代測試集嗎?
`validation_split` 不能取代最終測試集。Validation data 用於訓練期間調整判斷,test data 應保留到最後做一次較接近真實泛化能力的評估。
使用 tf.data.Dataset 時 y 要另外傳給 model.fit() 嗎?
使用 `tf.data.Dataset` 且 dataset 已輸出 `(inputs, targets)` 時,`y` 通常不要另外傳入。Keras 會從 dataset 的 tuple 結構中讀出輸入、標籤與可選的 sample weights。
callbacks 在 model.fit() 裡通常用來做什麼?
`callbacks` 常用來做提前停止、儲存最佳模型、調整 learning rate 或寫入 TensorBoard。`EarlyStopping` 和 `ModelCheckpoint` 是訓練實驗裡最常見的兩個 callback。
softmax 和 sigmoid 要怎麼選?
每筆資料只會屬於一個類別時,分類輸出通常用 `softmax`。每筆資料可能同時屬於多個類別時,分類輸出通常用 `sigmoid`,並搭配適合多標籤任務的 loss。
參考資料
- Keras,〈Model training APIs〉,存取日期:2026-08-28。
- Keras,〈Training & evaluation with the built-in methods〉,存取日期:2026-08-28。
- TensorFlow,〈tf.keras.Model〉,存取日期:2026-08-28。
最後更新
2026-08-28
關於作者 {#author}
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2022-12-22
