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 串成一次訓練流程。實務上先把 xybatch_sizeepochsvalidation_datacallbacks 設清楚,再用 model.summary() 檢查模型結構,會比一開始就調很多超參數穩得多。

model.fit() 是做什麼用的?

Keras model.fit() 會依指定的 epoch 數訓練模型,並在每個 batch 中計算 loss、反向傳播與更新權重。fit() 回傳的 History 物件可用來查看每輪訓練與驗證指標。

Keras 官方文件將 fit() 定義為用固定 epoch 數訓練模型的方法;x 可接受 NumPy array、tensor、tf.data.DatasetPyDataset、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_sizeworkersuse_multiprocessing 已不在新版 Keras 文件的主要 fit() signature 中;維護舊專案時要以專案實際 TensorFlow/Keras 版本文件為準。

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() 之前,可以先用下列指令查看模型資訊:

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 前是否打亂資料分類訓練多半開啟;時間序列資料要特別小心

一個基本訓練範例如下:

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.DatasetPyDatasetDataLoader 或 generator,通常不要再傳 batch_size,因為資料來源本身已經產生 batch(Keras,存取日期:2026-08-28)。

什麼是更新權重?

更新權重是神經網路用訓練資料修正模型參數的過程。模型先計算預測與標籤之間的 loss,再透過反向傳播與 optimizer 調整權重,讓下一次預測更接近目標。

在神經網路中,權重是用於計算網路輸出的參數。每個神經元都有自己的權重,這些權重決定該神經元對輸出的貢獻。

訓練神經網路時,模型會根據輸入和預期輸出計算損失,然後使用反向傳播演算法調整權重,使損失逐步降低。嚴格來說,權重是模型透過訓練學到的參數;learning_ratebatch_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 取的是 xy 尾端樣本,而且是在 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-hotDense(num_classes, activation="softmax")categorical_crossentropy
多標籤分類Dense(num_labels, activation="sigmoid")binary_crossentropy

Keras compile() 文件說明,loss function 會比較 y_truey_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 分開。

常見問題

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

Keras 文件說明,未指定 batch_size 時通常預設為 32。若 xtf.data.DatasetPyDatasetDataLoader 或 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。EarlyStoppingModelCheckpoint 是訓練實驗裡最常見的兩個 callback。

Qsoftmax 和 sigmoid 要怎麼選?

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

參考資料

延伸閱讀

最後更新

2026-08-28

關於作者

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

首次發布:2022-12-22