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 dạng chữ viết tay dùng TensorFlow như thế nào
Hướng Dẫn Đồ Án

Nhận dạng chữ viết tay dùng TensorFlow như thế nào

Chia sẻ
Chia sẻ

Giới thiệu

Nhận dạng chữ viết tay (Handwritten Digit Recognition) là một trong những bài toán kinh điển trong lĩnh vực học sâu (Deep Learning), được ứng dụng trong kiểm tra phiếu, đọc hóa đơn, nhập liệu tự động v.v.

Trong bài viết này, bạn sẽ được hướng dẫn từng bước xây dựng mô hình nhận dạng chữ số viết tay bằng TensorFlow và Keras, sử dụng dữ liệu MNIST – một tập dữ liệu tiêu chuẩn gồm hơn 60.000 ảnh chữ số từ 0 đến 9.

Chuẩn bị môi trường và cài đặt thư viện cần thiết

Bạn cần Python 3.8 trở lên và cài đặt các thư viện chính như:

pip install tensorflow pandas matplotlib scikit-learn

Nếu dùng GPU, bạn nên cài thêm tensorflow-gpu (với CUDA và cuDNN đúng version), nhưng với sinh viên thì train CPU cũng đủ cho các dự án nhỏ.

Tải và xử lý dữ liệu đầu vào

Bạn có thể dùng tập dữ liệu mẫu như MNIST, [Iris], hoặc dữ liệu CSV của riêng bạn.

Ví dụ: Phân loại chữ số viết tay từ tập dữ liệu MNIST

File: load_data.py

import tensorflow as tf

# Tải dữ liệu MNIST
(x_train, y_train), (x_test, y_test) = tf.keras.datasets.mnist.load_data()

# Chuẩn hóa giá trị ảnh về [0,1]
x_train = x_train / 255.0
x_test = x_test / 255.0

# Thêm 1 chiều channel vào input (từ (28,28) -> (28,28,1))
x_train = x_train[..., tf.newaxis]
x_test = x_test[..., tf.newaxis]

Nếu bạn dùng dữ liệu ảnh riêng: cần resize về kích thước chuẩn và convert sang NumPy array hoặc dùng tf.data.

Xây dựng mô hình mạng nơ-ron bằng TensorFlow

Với Keras (API của TensorFlow), bạn có thể xây dựng mô hình rất gọn gàng:

File: model.py

from tensorflow.keras import layers, models

def build_model():
    model = models.Sequential([
        layers.Conv2D(32, (3,3), activation='relu', input_shape=(28,28,1)),
        layers.MaxPooling2D((2,2)),
        layers.Conv2D(64, (3,3), activation='relu'),
        layers.MaxPooling2D((2,2)),
        layers.Flatten(),
        layers.Dense(64, activation='relu'),
        layers.Dense(10, activation='softmax')  # 10 lớp cho các chữ số từ 0-9
    ])
    return model

Train mô hình và lưu kết quả huấn luyện

Sau khi xây dựng mô hình, bạn cần compile và train bằng .fit():

File: train.py

import tensorflow as tf
from load_data import x_train, y_train, x_test, y_test
from model import build_model

model = build_model()

# Compile mô hình
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

# Train mô hình
history = model.fit(x_train, y_train, epochs=5, validation_split=0.1, batch_size=32)

# Đánh giá
test_loss, test_acc = model.evaluate(x_test, y_test)
print(f"Độ chính xác tập test: {test_acc:.2f}")

# Lưu mô hình
model.save("model_mnist.h5")

Mỗi lần huấn luyện, bạn có thể lưu lịch sử (history) để vẽ biểu đồ loss/accuracy.

Trực quan hóa kết quả huấn luyện bằng đồ thị

Bạn nên thể hiện kết quả huấn luyện dưới dạng biểu đồ để đưa vào báo cáo.

File: train.py (thêm code dưới vào cuối file)

import matplotlib.pyplot as plt

def plot_history(history):
    # Accuracy
    plt.plot(history.history['accuracy'], label='Train Accuracy')
    plt.plot(history.history['val_accuracy'], label='Val Accuracy')
    plt.title('Độ chính xác qua các epoch')
    plt.xlabel('Epoch')
    plt.ylabel('Accuracy')
    plt.legend()
    plt.show()

    # Loss
    plt.plot(history.history['loss'], label='Train Loss')
    plt.plot(history.history['val_loss'], label='Val Loss')
    plt.title('Hàm mất mát qua các epoch')
    plt.xlabel('Epoch')
    plt.ylabel('Loss')
    plt.legend()
    plt.show()

Dự đoán một ảnh mới bằng mô hình đã train

Sau khi có mô hình đã lưu (model_mnist.h5), bạn có thể tải lại để sử dụng cho dự đoán.

File: predict.py

import tensorflow as tf
import numpy as np
from PIL import Image

# Load mô hình đã train
model = tf.keras.models.load_model("model_mnist.h5")

# Load ảnh cần dự đoán
img = Image.open("sample_digit.png").convert("L").resize((28,28))
img_array = np.array(img) / 255.0
img_array = img_array.reshape(1, 28, 28, 1)

# Dự đoán
prediction = model.predict(img_array)
print(f"Chữ số được dự đoán: {np.argmax(prediction)}")

Ảnh đầu vào cần là ảnh trắng đen, kích thước 28×28, giống định dạng MNIST.

Gợi ý thêm nếu dùng làm đồ án

Để đồ án trở nên ấn tượng hơn, bạn có thể mở rộng:

  • Thêm giao diện nhận ảnh hoặc text đầu vào (Streamlit, Flask)

  • Chuyển sang dữ liệu thực tế: ảnh bệnh, phân loại cảm xúc, dự đoán kết quả học tập

  • So sánh các kiến trúc CNN, RNN, hoặc thử thêm Dropout, BatchNormalization

  • Đánh giá mô hình bằng confusion matrix, ROC-AUC

  • Triển khai lên web, cloud (Google Colab, Heroku, Render)

Kết luận

Việc train mô hình bằng TensorFlow không quá khó nếu bạn làm đúng từng bước: xử lý dữ liệu, xây dựng mô hình, huấn luyện, đánh giá, và triển khai.

Dự án phân loại ảnh chữ số như MNIST chính là ví dụ điển hình để bạn luyện tập TensorFlow, và có thể dùng làm phần cốt lõi trong đồ án tốt nghiệp.

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!