Convolutional Neural Network (CNN) là một kiến trúc mạng nơ-ron sâu được thiết kế đặc biệt để xử lý dữ liệu dạng lưới như hình ảnh. CNN đã trở thành tiêu chuẩn trong các bài toán thị giác máy tính, từ phân loại ảnh, phát hiện đối tượng đến xử lý video.
Nếu bạn từng xem bài Tạo mô hình phân loại ảnh chó mèo với TensorFlow, bạn đã có cái nhìn ban đầu về cách CNN hoạt động trong thực tế. Bài Xây dựng mô hình phát hiện bệnh từ ảnh X-quang cũng minh chứng sức mạnh của CNN trong y học. Trong bài này, chúng ta sẽ đi sâu hơn vào lý thuyết và xây dựng một CNN đơn giản để phân loại ảnh.
Mô tả bài toán
Bài toán đặt ra là: Xây dựng một Convolutional Neural Network đơn giản để phân loại các bức ảnh vào hai nhóm: chó và mèo. Chúng ta sẽ sử dụng bộ dữ liệu Dogs vs Cats từ Kaggle, có hơn 25.000 ảnh được gắn nhãn sẵn.
Mục tiêu:
-
Hiểu cấu trúc CNN: convolution, pooling, fully connected layers
-
Triển khai CNN cơ bản với TensorFlow/Keras
-
Huấn luyện, đánh giá mô hình và trực quan hóa kết quả
Convolutional Neural Network là gì?
Kiến trúc tổng quan
CNN được xây dựng từ 3 khối chính:
- Convolutional Layers: Trích xuất đặc trưng từ ảnh bằng cách sử dụng các bộ lọc (kernels).
- Pooling Layers: Giảm chiều dữ liệu, giữ lại thông tin quan trọng nhất.
- Fully Connected Layers: Thực hiện dự đoán dựa trên các đặc trưng đã trích xuất.
Cách CNN xử lý ảnh
Convolution
-
Áp dụng một kernel (ma trận nhỏ, ví dụ 3×3) trượt trên ảnh đầu vào.
-
Mỗi bước trượt (stride) tạo ra một giá trị mới trong feature map.
-
Kết quả là một tập hợp các feature map biểu diễn các đặc trưng như đường viền, góc cạnh.
Pooling
-
Max pooling lấy giá trị lớn nhất trong vùng nhỏ (ví dụ 2×2).
-
Giúp giảm kích thước dữ liệu và số tham số, đồng thời làm mạng chống overfitting.
Fully Connected
-
Các layer Dense truyền thống “học” cách kết hợp các đặc trưng để phân loại.
Chuẩn bị dữ liệu
Dataset và link tải
📥 Dogs vs Cats Kaggle dataset:
https://www.kaggle.com/competitions/dogs-vs-cats/data
Tải file train.zip, giải nén thành thư mục train/ gồm hai nhóm dogs và cats.

