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 版本文件為準。
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.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 分開。
常見問題
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。
延伸閱讀
- Keras 介紹:用 Python 快速建立深度學習模型的高階 API:同樣聚焦 Keras、TensorFlow,可接著比較不同情境的做法。
- 如何使用 Keras 回呼(callbacks)觸發訓練週期的結束?ModelCheckpoint 與 EarlyStopping 實戰:同樣聚焦 Keras、TensorFlow,可接著比較不同情境的做法。
- Keras 建立模型並預測資料:從 Sequential 到 model.predict 的完整流程:同樣聚焦 Keras、TensorFlow,可接著比較不同情境的做法。
最後更新
2026-08-28
關於作者
Claire Chang | 企業 AI 導入與流程轉型顧問。專注於 AI Agent 架構設計、ERP 系統整合與企業 AI 治理。
首次發布:2022-12-22
