Keras là một high-level API của Tensorflow, được phát triển nhằm giúp người dùng có thể dễ dàng xây dựng và huấn luyện các mô hình Deep learning. Trong bài tutorial này, chúng ta sẽ thực hành sử dụng Keras với Fashion Minist dataset.

Trước hết, chúng ta sử dụng keras.datasets để load dữ liệu rồi hiển thị một số thông tin về dataset như sau :

Như vậy, có tất cả 60.000 images trong train set và 10.000 image trong test set. Mỗi một image được biểu diễn dưới dạng 2-d array 28 x 28 với giá trị pixel trong khoảng [0, 255]. Các image này được phân loại thành 10 loại có giá trị từ 0-9 (do tên của từng class không có trong dataset nên ta tạo thêm biến class_names).

Tiếp theo, ta thử hiển thị một số ảnh trong train set như sau:

Bây giờ, chúng ta sẽ tiến hành xây dựng và huấn luyên mô hình deep learning với train data. Tuy nhiên, tương tự như trong bài tutorial Xây dựng mô hình Deep learning với Mid-level APIs, chúng ta cần phải thực hiện Data Normalization để đưa tất cả giá trị của từng pixel về khoảng [0, 1]. Do tất cả các giá trị của các pixel đều nằm trong khoảng [0, 255] nên ta chỉ cần chia giá trị này cho 255 như sau:

Với Keras, ta thường sử dụng tf.keras.Sequential  để xây dựng Model bằng cách thêm từng layer một cách nối tiếp nhau như sau:

Lưu ý:

– Ở Layer đầu tiên, chúng ta sử dụng tf.keras.layers.Flatten nhằm chuyển giá trị của image từ dạng 2-d array thành 1-d array 28 * 28 = 784 pixels. 1-d array này sau đó trở thành input của Hidden layer phía sau.

– Trong việc xử lý hình ảnh, chúng ta thường sử dụng Convolutional Neural Network. Tuy nhiên trong ví dụ này, để các bạn dễ hình dung thì chúng ta sử dụng mạng Neural Netwok thông thường với 2 Hidden Layers.

Tiếp theo, chúng ta cần định nghĩa hàm Loss function và Optimization Algorithms. với việc sử dụng hàm .compile() như sau:

Để bắt đầu huấn luyện Model, ta chỉ cần sử dụng hàm .fit() như sau:

Ở đây, chúng ta sử dụng tham số validation_split để chia training data thành 2 phần: 70% data sẽ được sử dụng để huấn luyện Model còn 30% còn lại được sử dụng để đánh giá Model. Kết quả của từng Epoch hiển thị giá trị của Loss function và giá trị Accuracy của cả train set và validation set.

Tuy nhiên có 2 vấn đề xảy ra khi ta cấu hình model.fit() như trên là:

– Overfitting: giá trị Accuracy của train set tăng lên theo Epoch nhưng đến một thời điểm nhất định thì giá trị Accuracy của validation set sẽ giảm đi.

– Model được tạo ra là Model của Epoch cuối cùng. Do đó Model này chưa chắc đã là Model tốt nhất mà Model tốt nhất thường được tạo ra từ Epoch trước đó.

Để khắc phục hai vấn đề này, chúng ta sẽ sử dụng tf.keras.callbacks để thiết lập EarlyStopping (giải quyết vấn đề Overfitting) và ModelCheckpoint để lưu lại Model tốt nhất như sau:

Từ kết quả trên ta thấy rằng, với việc sử dụng early-stopping, quá trình huấn luyện dừng ở Epoch 19 (thay vì 50 như ban đầu) và Model tốt nhất được tạo ra tại Epoch 09 với giá trị của val_loss là 0.40102.

Sau khi kết thúc quá trình huấn luyện, chúng ta sử dụng keras.models.load_model() để load Model đã lưu rồi sử dụng hàm .evaluate() để đánh giá test set như sau:

Ngoài ra chúng ta có thể sử dụng matplotlib để hiển thị kết quả phân loại của Model tạo ra một cách trực quan hơn:

Như vậy, chúng ta đã hoàn thành việc viết chương trình sử dụng Keras, một High-level API của TensorFLow, để xây dựng và huấn luyện mô hình Deep learning. Các bạn có thể tham khảo Notebook của chương trình này tại đây.

Tháng Ba 25, 2019
ITechSeeker