iT邦幫忙

2025 iThome 鐵人賽

DAY 1
0
佛心分享-IT 人自學之術

深度學習Tensorflow 2.X系列 第 25

提前停止(Early stopping)

  • 分享至 

  • xImage
  •  

過度擬合就是模型在訓練資料上表現得很好,但在沒看過的測試資料上效果卻很差。
為甚麼要提前停止? 在模型訓練過程中,我們會同時觀察訓練資料和驗證資料的表現。一開始,兩者的誤差都會隨著訓練而減少。但當模型開始過度擬合時,你會發現訓練資料的誤差持續下降,但驗證資料的誤差卻開始上升。
這個時候,就應該停止訓練了。

提前停止 的目的就是,在模型即將要過度擬合時,及時喊停,而不是讓它繼續學下去。這樣可以確保模型在新的資料上也能保持良好的泛化能力,也就是說,它學會的是通用的規律,而不是訓練資料中的特例。
這次有修改一些,課本的程式不能用

from tensorflow.keras.models import Sequential
from tensorflow.keras import layers
from tensorflow.keras import metrics
from tensorflow.keras.callbacks import EarlyStopping

# 匯入Keras 的 mnist 樹據
from tensorflow.keras.datasets import mnist
(train_Data, train_label), (test_Data, test_label) = mnist.load_data()
model = Sequential([
    layers.Flatten(input_shape=(28, 28)), # 將輸入資料從 28x28 攤平成 784
    layers.Dense(256, activation='relu'),
    layers.Dense(128, activation='relu'),
    layers.Dense(64, activation='relu'),
    layers.Dense(10, activation='softmax') # output 為 10 個 class
])

# 定義訓練的步驟數目
NUM_EPOCHS = 100

# model 每層定義好後需要經過 compile
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['acc',
                       metrics.sparse_top_k_categorical_accuracy])

# 定義 tf.keras.EarlyStopping 回調函數
# 並指名監控的對象 => val_sparse_top_k_categorical_accuracy
earlystop_callback = EarlyStopping(
    monitor='val_sparse_top_k_categorical_accuracy',
    min_delta=0.001,
    patience=1,
    verbose=1,
    mode='max' # 新增這行,明確指定監控模式
)

# 將建立好的 model 去 fit 我們 training data
model.fit(train_Data, train_label,validation_split = 0.2,epochs=NUM_EPOCHS,callbacks=[earlystop_callback,])

# 利用 test_Data 去進行模型評估
# verbose = 2 為每個 epoch 輸出一行紀錄
model.evaluate(test_Data, test_label, verbose=2)

https://ithelp.ithome.com.tw/upload/images/20250924/20168366LshlnUth44.png


上一篇
數據集劃分
下一篇
設定模型層數
系列文
深度學習Tensorflow 2.X27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言