Chào mừng các bạn quay trở lại với loạt bài về Keras Cơ Bản của tek4.vn. Trong bài viết này chúng ta sẽ cùng khám phá cách làm thế nào để tạm dừng huấn luyện mô hình đúng thời điểm thay vì dừng sớm. Bắt đầu thôi!
Xem thêm bài viết trước: Tăng Tốc Huấn Luyện Mô Hình Với Batch Normalization
Mạng neural là một thách thức để huấn luyện.
Huấn luyện quá ít và mô hình không hiệu quả. Huấn luyện quá nhiều và mô hình làm quá tải tập dữ liệu đào tạo. Cả hai trường hợp đều dẫn đến một mô hình kém hiệu quả.
Một cách tiếp cận để giải quyết vấn đề này là sử dụng phương pháp dừng huấn luyện đúng thời điểm hay còn gọi là dừng sớm (early stopping). Điều này liên quan đến việc theo dõi sự mất mát trên tập dữ liệu đào tạo và tập dữ liệu xác thực (một tập con của tập dữ liệu đào tạo không được sử dụng để huấn luyện mô hình). Ngay sau khi có dấu hiệu quá khớp với bộ dữ liệu xác thực, quá trình huấn luyện có thể bị dừng lại.
Việc dừng sớm có thể được sử dụng với mô hình của bạn bằng cách trước tiên phải đảm bảo rằng bạn có tập dữ liệu xác thực. Bạn có thể xác định tập dữ liệu xác thực theo cách thủ công thông qua đối số validation_data cho hàm fit() hoặc bạn có thể sử dụng validation_split và chỉ định số lượng tập dữ liệu đào tạo cần giữ lại để xác thực.
Sau đó, bạn có thể xác định EarlyStopping và hướng dẫn nó về biện pháp hiệu suất nào cần theo dõi, chẳng hạn như ‘val_loss‘ cho sự mất mát trên tập dữ liệu xác thực và số epoch để quan sát thấy quá khớp trước khi thực hiện hành động.
Lệnh gọi lại EarlyStopping được định cấu hình này sau đó có thể được cung cấp cho hàm fit() thông qua đối số “callbacks” lấy danh sách các lệnh gọi lại.
Điều này cho phép bạn đặt số lượng epoch thành một số lượng lớn và tin tưởng rằng quá trình đào tạo sẽ kết thúc ngay khi mô hình bắt đầu bị quá khớp. Bạn cũng có thể muốn tạo một đường cong học tập để khám phá thêm thông tin chi tiết về động lực học tập của quá trình chạy và khi quá trình đào tạo bị tạm dừng.
Ví dụ dưới đây minh họa một mạng nơ ron nhỏ trong bài toán phân loại nhị phân tổng hợp sử dụng tính năng dừng sớm để tạm dừng đào tạo ngay khi mô hình bắt đầu bị quá khớp (sau khoảng 50 epoch).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# example of using early stopping from sklearn.datasets import make_classification from tensorflow.keras import Sequential from tensorflow.keras.layers import Dense from tensorflow.keras.callbacks import EarlyStopping # create the dataset X, y = make_classification(n_samples=1000, n_classes=2, random_state=1) # determine the number of input features n_features = X.shape[1] # define model model = Sequential() model.add(Dense(10, activation='relu', kernel_initializer='he_normal', input_shape=(n_features,))) model.add(Dense(1, activation='sigmoid')) # compile the model model.compile(optimizer='adam', loss='binary_crossentropy') # configure early stopping es = EarlyStopping(monitor='val_loss', patience=5) # fit the model history = model.fit(X, y, epochs=200, batch_size=32, verbose=0, validation_split=0.3, callbacks=[es]) |
API tf.keras cung cấp một số lệnh gọi lại mà bạn có thể muốn khám phá; Bạn có thể tìm hiểu thêm tại đây:
Đây là bài viết cuối cùng trong loạt bài về Keras cơ bản. Hi vọng bạn thấy thích thú và hài lòng với những gì học được trong series này, nếu có bất cứ thắc mắc nào đừng ngần ngại để lại dưới phần bình luận. Cảm ơn các bạn đã quan tâm theo dõi và đừng quên ủng hộ tek4.vn để chúng mình có động lực phát triển thêm nhiều series hay ho khác nhé!