Keras 模型訓練流程與 model.fit 參數設定示意圖

← INSIGHTS & PERSPECTIVES | 機器學習

Keras model.fit() 參數設定:batch_size、epochs、validation 與 callbacks 怎麼用?

說明 Keras model.fit() 常用參數設定,包含 x、y、batch_size、epochs、validation_data、callbacks 與權重更新觀念。

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 沒對齊。訓練前照這份清單掃一次,可以少掉很多重跑。

  1. 用 `model.summary()` 確認輸入 shape、輸出 shape 與參數量。
  2. 確認 `x_train` 第一維是樣本數,且與 `y_train` 第一維一致。
  3. 確認最後一層 activation 與 loss function 對應分類型態。
  4. 使用 NumPy array 或 tensor 時,再設定 `batch_size`;dataset 已 batch 時不要重複指定。
  5. 優先準備固定 `validation_data`,快速實驗才用 `validation_split`。
  6. 需要自動停止、存檔或看 TensorBoard 時,把邏輯放進 `callbacks`。
  7. 訓練結果怪異時,先看 loss 是否下降,再看 validation loss 是否和 training loss 分開。

延伸閱讀

Keras `model.fit()` 只是訓練流程的一段。若要把模型訓練、摘要、預測與效能觀察串起來,可以接著看這幾篇站內筆記:

常見問題

Qmodel.fit() 的 batch_size 預設是多少?

Keras 文件說明,未指定 `batch_size` 時通常預設為 32。若 `x` 是 `tf.data.Dataset`、`PyDataset`、`DataLoader` 或 generator,資料來源本身應產生 batch,通常不要再傳 `batch_size`。

Qepochs 越多模型就越準嗎?

`epochs` 越多不一定越準。訓練輪數太少可能欠擬合,訓練輪數太多可能過擬合;建議搭配 validation loss 與 `EarlyStopping` 判斷何時停止。

Qvalidation_split 可以取代測試集嗎?

`validation_split` 不能取代最終測試集。Validation data 用於訓練期間調整判斷,test data 應保留到最後做一次較接近真實泛化能力的評估。

Q使用 tf.data.Dataset 時 y 要另外傳給 model.fit() 嗎?

使用 `tf.data.Dataset` 且 dataset 已輸出 `(inputs, targets)` 時,`y` 通常不要另外傳入。Keras 會從 dataset 的 tuple 結構中讀出輸入、標籤與可選的 sample weights。

Qcallbacks 在 model.fit() 裡通常用來做什麼?

`callbacks` 常用來做提前停止、儲存最佳模型、調整 learning rate 或寫入 TensorBoard。`EarlyStopping` 和 `ModelCheckpoint` 是訓練實驗裡最常見的兩個 callback。

Qsoftmax 和 sigmoid 要怎麼選?

每筆資料只會屬於一個類別時,分類輸出通常用 `softmax`。每筆資料可能同時屬於多個類別時,分類輸出通常用 `sigmoid`,並搭配適合多標籤任務的 loss。

參考資料

最後更新

2026-08-28

關於作者 {#author}

Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。

首次發布:2022-12-22