Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Nhận diện chữ viết tay bằng MNIST: Hướng dẫn làm đồ án Deep Learning từ A-Z
Hướng Dẫn Đồ ÁnLập Trình AI

Nhận diện chữ viết tay bằng MNIST: Hướng dẫn làm đồ án Deep Learning từ A-Z

Chia sẻ
Chia sẻ

Trong lĩnh vực trí tuệ nhân tạo, việc nhận diện chữ viết tay từ hình ảnh là một bài toán kinh điển và mang tính ứng dụng cao trong thực tế. Từ việc xử lý phiếu khảo sát, tự động hóa kiểm tra biểu mẫu, đến xây dựng hệ thống chấm điểm trắc nghiệm, khả năng nhận diện chính xác chữ viết tay giúp tiết kiệm thời gian và giảm thiểu sai sót. Một trong những bộ dữ liệu nổi tiếng nhất hỗ trợ giải quyết bài toán này là MNIST – tập dữ liệu gồm 70.000 ảnh chữ số viết tay được chuẩn hóa. Nếu bạn từng làm việc với các bài toán như phân loại hình ảnh đồ ăn bằng mô hình pre-trained hoặc tạo mô hình phân loại chó và mèo, thì chắc chắn sẽ thấy nhiều kỹ thuật quen thuộc trong bài toán MNIST này.

Bài viết này sẽ hướng dẫn bạn từng bước xây dựng mô hình nhận diện chữ viết tay bằng mạng nơ-ron tích chập (CNN). Từ tải dữ liệu, xử lý đầu vào, xây dựng kiến trúc mạng cho đến huấn luyện và đánh giá mô hình, tất cả đều được trình bày chi tiết để bạn có thể thực hành ngay. Đây là đồ án lý tưởng cho sinh viên công nghệ thông tin, người mới bắt đầu học Deep Learning hoặc những ai đang tìm kiếm một dự án thực tế để bổ sung vào portfolio.

Mô tả bài toán

Bài toán đặt ra là xây dựng một mô hình có thể tự động phân loại ảnh chữ số viết tay (0-9) từ tập dữ liệu MNIST. Mỗi ảnh là một ma trận 28×28 pixel, với độ xám từ 0 (đen hoàn toàn) đến 255 (trắng hoàn toàn). Mục tiêu của mô hình là đạt được độ chính xác cao nhất trên tập kiểm tra (test set) khi dự đoán chữ số.

Link tải dữ liệu MNIST

Bạn có thể tải trực tiếp MNIST từ TensorFlow datasets:

from tensorflow.keras.datasets import mnist

(X_train, y_train), (X_test, y_test) = mnist.load_data()

Hoặc tải bộ dữ liệu dạng CSV từ Kaggle:
👉 MNIST in CSV (Kaggle)

Cài đặt môi trường và thư viện

Đảm bảo bạn có Python 3.7+ và cài đặt các thư viện cần thiết:

pip install tensorflow numpy matplotlib seaborn

Xây dựng mô hình CNN nhận diện chữ viết tay

Bước 1: Tiền xử lý dữ liệu

Chuẩn hóa dữ liệu và reshape về dạng phù hợp cho CNN:

import tensorflow as tf
from tensorflow.keras.utils import to_categorical

# Chuẩn hóa pixel về khoảng 0-1
X_train = X_train.reshape(-1, 28, 28, 1).astype("float32") / 255
X_test = X_test.reshape(-1, 28, 28, 1).astype("float32") / 255

# One-hot encode labels
y_train = to_categorical(y_train, 10)
y_test = to_categorical(y_test, 10)

Bước 2: Xây dựng kiến trúc CNN

Tạo mô hình CNN đơn giản với Keras:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout

model = Sequential([
    Conv2D(32, (3, 3), activation='relu', input_shape=(28, 28, 1)),
    MaxPooling2D((2, 2)),
    Conv2D(64, (3, 3), activation='relu'),
    MaxPooling2D((2, 2)),
    Flatten(),
    Dense(128, activation='relu'),
    Dropout(0.5),
    Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['accuracy'])

Bước 3: Huấn luyện mô hình

history = model.fit(X_train, y_train,
                    epochs=10,
                    batch_size=128,
                    validation_split=0.1)

Bước 4: Đánh giá mô hình

test_loss, test_acc = model.evaluate(X_test, y_test)
print("Độ chính xác trên tập test:", test_acc)

Trực quan hóa độ chính xác và hàm mất mát:

import matplotlib.pyplot as plt

plt.plot(history.history['accuracy'], label='Train accuracy')
plt.plot(history.history['val_accuracy'], label='Val accuracy')
plt.xlabel('Epoch')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

Bước 5: Dự đoán và hiển thị kết quả

import numpy as np

predictions = model.predict(X_test)
predicted_classes = np.argmax(predictions, axis=1)

# Hiển thị 10 ảnh test đầu tiên với nhãn dự đoán
for i in range(10):
    plt.imshow(X_test[i].reshape(28,28), cmap='gray')
    plt.title(f"Label: {np.argmax(y_test[i])}, Predicted: {predicted_classes[i]}")
    plt.show()

Kết luận

Qua bài viết, bạn đã được hướng dẫn toàn bộ quy trình xây dựng một hệ thống nhận diện chữ viết tay từ dữ liệu MNIST: từ tiền xử lý dữ liệu, thiết kế mạng CNN, huấn luyện mô hình đến đánh giá kết quả. Kỹ thuật này không chỉ dừng lại ở chữ số viết tay mà còn có thể mở rộng sang nhiều lĩnh vực như nhận diện chữ viết tay tiếng Việt, chữ ký điện tử hoặc phân loại hình ảnh y tế với độ chính xác cao.

Đây cũng là một bước đệm vững chắc để bạn tiến xa hơn trong lĩnh vực trí tuệ nhân tạo. Bạn có thể kết hợp các kỹ thuật nâng cao như data augmentation, tối ưu hyperparameter hoặc thử nghiệm với các kiến trúc mạng sâu hơn như ResNet để cải thiện hiệu suất mô hình. Với nền tảng từ dự án này, việc chuyển sang các bài toán phức tạp hơn như phân tích dữ liệu y tế từ file CSV sẽ trở nên dễ dàng hơn rất nhiều.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!