Tải bản đầy đủ (.docx) (32 trang)

Tìm Hiểu Mạng Cnn Và Ứng Dụng Nhận Dạng Ký Tự Chữ Cái.docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.04 MB, 32 trang )

TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
KHOA CÔNG NGHỆ THÔNG TIN
===== o0o =====

BÀI TẬP LỚN MƠN: TRÍ TUỆ NHÂN TẠO
Đề tài: Tìm hiểu mạng CNN và ứng dụng nhận dạng ký tự chữ cái

Hà Nội - 08/2023.
1


MỤC LỤC
MỤC LỤC.................................................................................................................5
DANH MỤC HÌNH ẢNH........................................................................................7
DANH MỤC VIẾT TẮT..........................................................................................8
LỜI MỞ ĐẦU...........................................................................................................9
CHƯƠNG I. TÌM HIỂU CHUNG VỀ MẠNG NƠ RON CNN..........................10
1.1.

Tổng quan về mạng CNN....................................................................................................................................10

1.1.1.

Khái niệm chung..........................................................................................................................................10

1.1.2.

Ưu điểm.......................................................................................................................................................11

1.1.3.


Nhược điểm.................................................................................................................................................11

1.2.

Lớp tích chập – Convolution Layer.....................................................................................................................12

1.2.1.

Khái niệm....................................................................................................................................................12

1.2.2.

Bộ Lọc (Filter hoặc Kernel).........................................................................................................................12

1.2.3.

Bước di chuyển (Stride)...............................................................................................................................13

1.2.4.

Đệm (Padding).............................................................................................................................................14

1.3.

Lớp gộp – Pooling Layer....................................................................................................................................14

1.3.1.

Khái niệm....................................................................................................................................................14


1.3.2.

Max Pooling................................................................................................................................................14

1.3.3.

Average Polling...........................................................................................................................................14

1.3.4.

Sum Pooling................................................................................................................................................14

1.4.

Fully connected layer..........................................................................................................................................15

1.4.1.

Khái niệm....................................................................................................................................................15

1.4.2.

Cách hoạt động của Fully Connected Layer................................................................................................15

1.5.

Các công cụ.........................................................................................................................................................15

1.5.1.


Windows PowerShell.................................................................................................................................15

a.

Giới thiệu.........................................................................................................................................................15

b.

Tính năng.........................................................................................................................................................15

1.5.2.

Visual Studio Code......................................................................................................................................16

a.

Giới thiệu.........................................................................................................................................................16

b.

Tính năng.........................................................................................................................................................16

1.5.3.
b.

ResNet.........................................................................................................................................................16
Đặc điểm.........................................................................................................................................................16
2



a.

Giới thiệu.........................................................................................................................................................17

1.5.4.

TensorFlow..................................................................................................................................................17

a. Giới thiệu.............................................................................................................................................................17
b. Các option tải dữ liệu vào TensorFlow................................................................................................................19

CHƯƠNG II. ỨNG DỤNG CNN TRONG NHẬN DẠNG CHỮ CÁI...............20
2.1.

Giới thiệu bài toán...............................................................................................................................................20

2.2.

Tập dữ liệu..........................................................................................................................................................20

2.3.

Kaggle A-Z..........................................................................................................................................................20

2.4.

MNIST................................................................................................................................................................ 20

2.5.


Các bước thực hiện..............................................................................................................................................21

2.5.1.

Import các thư viện cần thiết.......................................................................................................................21

2.5.2.

Xây dựng trình và phân tích cú pháp đối số.................................................................................................21

2.5.3.

Xử lý dữ liệu từ bộ dữ liệu A-Z và MNIST.................................................................................................21

2.5.4.

Khởi tạo và biên dịch mạng lưới CNN........................................................................................................22

2.5.4.1.

Sử dụng SGD (Stochastic Gradient Descent) làn bộ tối ưu hóa với learning rate ‘INIT_LR’..............22

2.5.4.2.

Xây dựng mơ hình ResNet...................................................................................................................22

2.5.4.2.1 Phương thức residual_module..............................................................................................................23
2.5.4.2.2 Phương thức Build................................................................................................................................24
2.5.4.2.2.1 Định nghĩa hình dạng của dữ liệu đầu vào.....................................................................................25
2.5.4.2.2.2 Xây dựng các lớp trong kiến trúc mạng ResNet.............................................................................26

2.5.4.2.2.3 Các lớp xử lý cuối cùng của mơ hình mạng CNN..........................................................................27
2.5.4.2.2.4 Phương thức khởi tạo mơ hình Keras.............................................................................................28
2.5.5.

Trainning.....................................................................................................................................................28

2.5.6.

Định nghĩa và đánh giá dữ liệu....................................................................................................................28

2.5.7.

Xây dựng biểu đồ và lưu lịch sử training.....................................................................................................29

2.5.8.

Xây dựng chương trình nhận biết kí tự chữ cái............................................................................................29

2.5.9.

Kết quả chương trình...................................................................................................................................32

KẾT LUẬN..............................................................................................................34
TÀI LIỆU THAM KHẢO......................................................................................35

3


DANH MỤC HÌNH ẢNH
Hình 1: Hình ảnh là ma trận RGB 6x6x3.

Hình 2: Tồn bộ luồng CNN để xử lý hình ảnh đầu vào và phân loại đối tượng dựa trên giá trị.
Hình 3: Hình ảnh tích chập khác nhau khi áp dụng các Kernel khác nhau.
Hình 4: Lớp tích chập hoạt động với Stride là 2.
Hình 5: Ví dụ cơ bản về TensorFlow.
Hình 6: Tập dữ liệu “A-Z” trên Kaggle.
Hình 7: Tập dữ liệu MNIST.
Hình 8: Import các thư viện cần thiết.
Hình 9: Đoạn mã xây dựng và phân tích đối số.
Hình 10: Đoạn mã xử lý dữ liệu từ bộ dữ liệu A-Z và MNIST.
Hình 11: Đoạn mã sử dụng SGD để tối ưu hóa mơ hình ResNet.
Hình 12: Xây dựng hàm residual_module.
Hình 13: Đoạn mã định nghĩa hình dạng của dữ liệu đầu vào.
Hình 14: Vịng lặp số lượng giai đoạn trong ResNet.
Hình 15: Đoạn mã áp dụng các lớp chuẩn hóa batch.
Hình 16: Đoạn mã tạo một mơ hình Keras.
Hình 17: Đoạn mã huấn luyện.
Hình 18: Đoạn mã định nghĩa và đánh giá dữ liệu.
Hình 19: Đoạn mã xây dựng biểu đồ và lưu lịch sử training.
Hình 20: Đoạn mã xây dựng chương trình nhận biết chữ cái.
Hình 21: Đoạn mã xây dựng chương trình và nhận biết chữ cái.
Hình 22: Kết quả của chương trình.
Hình 23: Kết quả của chương trình.

4

10
11
13
14
18

20
21
21
21
22
22
23
25
26
27
28
28
29
29
30
31
32
33


DANH MỤC VIẾT TẮT
TT
1
2
3
4
5
6
7
8

9
10

Ký hiệu chữ viết tắt
CNN
H
D
W
VS Code
ResNet
API
ML
MNIST
SGD

Chữ viết đầy đủ
Convolutional Neural Network
Height
Depth
Width
Visual Studio Code
Residual Network
Application Programming Interface
Machine Learning
Modified National Institute of Standards and Technology
Stochastic Gradient Descent

5



LỜI MỞ ĐẦU
Để hoàn thành bản báo cáo này, chúng em đã nhận được rất nhiều sự hướng dẫn từ phía các
thầy các cơ trong khoa. Sự giảng dạy chu đáo, tận tình và sự giúp đỡ nhiệt tình từ các thầy các cô
đã giúp chúng em hiểu ra nhiều vấn đề và hoàn thành bản báo cáo này tốt nhất.
Chúng em tỏ lịng biết ơn sâu sắc với cơ Lê Thị Thuỷ, người cơ đã tận tình hướng dẫn và
giúp đỡ, chỉ bảo nhóm em trong suốt q trình nghiên cứu đề tài và hoàn thành báo cáo này..
Sau khoảng thời gian cô Lê Thị Thủy đưa ra đề tài, chúng em đã rất nỗ lực và cố gắng trong
việc tìm hiểu về đề tài. Các bạn trong nhóm cùng các cộng sự đã rất chăm chỉ cũng như giúp đỡ lẫn
nhau để cho ra một báo cáo hoàn hảo nhất đến thời điểm hiện tại. Một lần nữa nhóm em xin cảm
ơn giảng viên Lê Thị Thủy, các bạn trong lớp và tập thể nhóm làm việc đã cùng nhau hoàn thành
tốt được bản báo cáo này.
Chúng em xin chân thành cảm ơn!

6


CHƯƠNG I. TÌM HIỂU CHUNG VỀ MẠNG NƠ RON CNN.
Deep learning ra đời từ các nền tảng và ý tưởng trong lĩnh vực machine learning và neural
network đã tồn tại từ thập kỷ 1940 và 1950. Tuy nhiên, khái niệm "deep learning" như chúng ta
hiểu ngày nay đã được hình thành và phát triển mạnh mẽ trong những năm gần đây. Deep
learning là một phần của trường machine learning (học máy), nó tập trung vào việc xây dựng và
huấn luyện các mạng nơ-ron nhân tạo sâu (deep neural networks) để thực hiện các nhiệm vụ
phân loại, dự đoán và xử lý dữ liệu phức tạp. Deep learning đã tạo ra sự cách mạng trong nhiều
lĩnh vực như thị giác máy tính, xử lý ngơn ngữ tự nhiên, và nhiều ứng dụng khác.
Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) là một trong những mơ
hình Deep Learning tiên tiến. Nó giúp cho chúng ta xây dựng được những hệ thống thơng minh
với độ chính xác cao như hiện nay.
CNN được sử dụng nhiều trong các bài toán nhận dạng các object trong ảnh. Để tìm hiểu
tại sao thuật tốn này được sử dụng rộng rãi cho việc nhận dạng (detection), chúng ta hãy cùng
tìm hiểu về thuật tốn này.

1.1. Tổng quan về mạng CNN.
1.1.1. Khái niệm chung
- Trong mạng neural, mơ hình mạng neural tích chập (CNN) là 1 trong những mơ hình để
nhận dạng và phân loại hình ảnh. Trong đó, xác định đối tượng và nhận dạng khn mặt là 1 trong
số những lĩnh vực mà CNN được sử dụng rộng rãi.
- CNN phân loại hình ảnh bằng cách lấy 1 hình ảnh đầu vào, xử lý và phân loại nó theo các
hạng mục nhất định (Ví dụ: Chó, Mèo, Hổ, ...). Máy tính coi hình ảnh đầu vào là 1 mảng pixel và
nó phụ thuộc vào độ phân giải của hình ảnh. Dựa trên độ phân giải hình ảnh, máy tính sẽ thấy H x
W x D (H: Chiều cao, W: Chiều rộng, D: Độ dày).

Hình 1: Hình ảnh là ma trận RGB 6x6x3.

7


- Về kỹ thuật, mơ hình CNN để training và kiểm tra, mỗi hình ảnh đầu vào sẽ chuyển nó qua
1 loạt các lớp tích chập với các bộ lọc (Kernals), tổng hợp lại các lớp được kết nối đầy đủ (Full
Connected) và áp dụng hàm Softmax để phân loại đối tượng có giá trị xác suất giữa 0 và 1.

Hình 2: Tồn bộ luồng CNN để xử lý hình ảnh đầu vào và phân loại đối tượng dựa trên giá trị.
1.1.2. Ưu điểm
-Trích xuất đặc trưng tự động: CNN tự động học cách trích xuất các đặc trưng quan trọng từ
dữ liệu ảnh mà không cần phải xác định rõ ràng các đặc trưng cụ thể. Điều này giúp giảm thiểu
công việc thủ công và tốn thời gian để thiết lập các đặc trưng thủ công.
- Xử lý dữ liệu không gian: CNN được thiết kế đặc biệt để xử lý dữ liệu không gian như ảnh
và âm thanh. Các lớp tích chập và gộp cho phép nó hiệu quả trong việc trích xuất thơng tin từ các
cấu trúc không gian này.
- Phân loại và nhận dạng tốt: CNN đã đạt được hiệu suất ấn tượng trong các nhiệm vụ phân
loại và nhận dạng. Điều này bao gồm nhận biết khn mặt, phân loại đối tượng, dự đốn từ ảnh, và
nhiều nhiệm vụ khác.

- Tích hợp thơng tin cục bộ: Các lớp tích chập trong CNN cho phép mạng tập trung vào việc
xử lý thông tin cục bộ trong các phần nhỏ của dữ liệu ảnh. Điều này giúp mạng nhận biết các đặc
trưng cục bộ và tạo ra biểu diễn chất lượng cao.
- Khả năng học tập sâu: CNN có thể được thiết kế với nhiều lớp và kích thước khác nhau, cho
phép nó học các đặc trưng ngày càng phức tạp và sâu hơn. Điều này giúp mạng học được các biểu
diễn tổng hợp và trừu tượng từ dữ liệu ảnh.
- Hiệu suất cao: Các mơ hình CNN tiên tiến có khả năng đạt được hiệu suất rất cao trong các
thách thức như các cuộc thi nhận dạng hình ảnh (ImageNet) và các ứng dụng thực tiễn như xe tự
hành.
1.1.3. Nhược điểm
- Số lượng tham số và tài ngun tính tốn: Các mạng CNN tiên tiến thường có hàng triệu
hoặc thậm chí hàng tỷ tham số. Điều này địi hỏi tài ngun tính tốn lớn để huấn luyện và triển
khai, đặc biệt là trên các thiết bị có tài nguyên hạn chế như điện thoại di động.
- Overfitting: Trong mạng CNN lớn, có nguy cơ mơ hình bị overfitting, tức là mơ hình học
q nhiều từ dữ liệu huấn luyện và khơng tổng qt hóa tốt trên dữ liệu mới. Điều này có thể dẫn
đến hiệu suất kém trên dữ liệu khơng nhìn thấy trước.
8


- Dữ liệu huấn luyện hạn chế: Mạng CNN yêu cầu một lượng lớn dữ liệu huấn luyện để học
hiệu quả. Nếu dữ liệu không đủ đa dạng hoặc không đại diện, mơ hình có thể khơng học được các
biểu diễn tổng quát.
- Chuẩn bị dữ liệu: Trước khi áp dụng CNN, dữ liệu thường cần phải được chuẩn bị và tiền
xử lý một cách cẩn thận, bao gồm việc thay đổi kích thước ảnh, chuẩn hóa dữ liệu và loại bỏ nhiễu.
- Khả năng biểu diễn không tốt cho dữ liệu không gian tương đối dài: Mạng CNN không thể
hiệu quả biểu diễn thông tin về thứ tự và tương quan không gian dài hơn, chẳng hạn như các dãy
thời gian dài.
1.2. Lớp tích chập – Convolution Layer.
1.2.1. Khái niệm
Lớp tích chập (Convolutional Layer) là một phần quan trọng trong mạng nơ-ron tích chập

(Convolutional Neural Network - CNN). Lớp tích chập chịu trách nhiệm cho việc tìm và trích xuất
các đặc trưng cục bộ từ dữ liệu đầu vào, thường là hình ảnh, bằng cách áp dụng phép tích chập.
1.2.2. Bộ Lọc (Filter hoặc Kernel)
Đây là ma trận nhỏ chứa các trọng số được áp dụng lên vùng cục bộ của dữ liệu đầu vào (ví
dụ: hình ảnh). Bộ lọc này có thể là một ma trận có kích thước nhỏ, chẳng hạn 3x3 hoặc 5x5.

9


Hình 3: Hình ảnh tích chập khác nhau khi áp dụng các Kernel khác nhau.
1.2.3. Bước di chuyển (Stride)
Stride là số pixel thay đổi trên ma trận đầu vào. Khi stride là 1 thì ta di chuyển các kernel 1
pixel. Khi stride là 2 thì ta di chuyển các kernel đi 2 pixel và tiếp tục như vậy. Hình dưới là lớp tích
chập hoạt động với stride là 2.

10


Hình 4: Lớp tích chập hoạt động với Stride là 2.
1.2.4. Đệm (Padding)
Đệm là việc thêm các giá trị 0 vào xung quanh dữ liệu đầu vào trước khi áp dụng phép tích
chập. Điều này giúp duy trì kích thước của dữ liệu sau khi đi qua lớp tích chập.
1.3. Lớp gộp – Pooling Layer.
1.3.1. Khái niệm
Lớp gộp (Pooling Layer) là một phần quan trọng trong kiến trúc của mạng nơ-ron sâu (deep
neural networks), đặc biệt là trong các mạng nơ-ron tích chập (convolutional neural networks CNNs), được sử dụng trong xử lý hình ảnh và các tác vụ liên quan đến dữ liệu lưới như dữ liệu âm
thanh.
1.3.2. Max Pooling
Max pooling là một loại phép gộp được sử dụng trong mạng nơ-ron tích chập (CNN) và các
kiến trúc liên quan. Nó thường được áp dụng sau lớp tích chập để giảm kích thước của đầu vào và

tạo ra các phiên bản đã tạo ra của đặc trưng cục bộ.
1.3.3. Average Polling
Average Pooling là một phép tích chập thường được sử dụng trong mạng học sâu và xử lý
ảnh. Nó là một phần quan trọng của các kiến trúc mạng thần kinh như Convolutional Neural
Networks (CNNs) để giảm kích thước của đặc trưng (feature maps) trong q trình trích xuất thơng
tin từ hình ảnh.
Ưu điểm chính của Average Pooling là nó giúp giảm kích thước của dữ liệu mà vẫn giữ lại
thơng tin quan trọng. Điều này có thể giúp làm giảm lượng tính tốn và giảm overfitting trong q
trình huấn luyện mạng.
1.3.4. Sum Pooling
Sum Pooling là một phương pháp trong xử lý ảnh và mạng học sâu, được sử dụng để giảm
kích thước của feature maps trong q trình trích xuất thơng tin từ hình ảnh. Tương tự như
11


Average Pooling và Max Pooling, Sum Pooling cũng là một loại phép gộp thông tin trong mạng
neural.
Mục tiêu của Sum Pooling tương tự như các phương pháp gộp khác, đó là giảm kích thước
của dữ liệu trong q trình huấn luyện mạng, giảm lượng tính tốn và có thể giúp kiểm sốt
overfitting.
1.4. Fully connected layer
1.4.1. Khái niệm
Fully connected layers (cịn gọi là dense layers) là một loại tầng trong kiến trúc mạng neural,
bao gồm các neuron được kết nối với tất cả các neuron ở tầng trước và tầng sau. Đây là tầng mạng
neural truyền thống, trong đó mỗi neuron nhận đầu vào từ tất cả các neuron ở tầng trước đó và
truyền đầu ra cho tất cả các neuron ở tầng sau.
1.4.2. Cách hoạt động của Fully Connected Layer
Flattening: Trong ngữ cảnh của Convolutional Neural Networks (CNN), đầu ra từ các tầng
convolutional và pooling layers thường là một tensor 3D hoặc 4D. Để đưa chúng vào fully
connected layers, cần phải làm phẳng (flatten) chúng thành một vector 1D. Điều này thường được

thực hiện trước khi các fully connected layers.
Weights and Biases: Mỗi neuron trong fully connected layers có một trọng số (weight)
tương ứng với mỗi kết nối đến neuron trong tầng trước đó. Ngồi ra, mỗi neuron cịn có một bias.
Các trọng số và bias này là các tham số mạng neural được học để tối ưu hóa hiệu suất mạng.
Activation Function: Sau khi tính tổng trọng số đầu vào từ các neuron ở tầng trước kết hợp
với bias, đầu ra của neuron thường được đưa qua một hàm kích hoạt phi tuyến (như ReLU,
Sigmoid, hoặc Tanh) để tạo ra đầu ra của tầng. Hàm kích hoạt này thêm tính phi tuyến tính vào
tầng fully connected.
Fully connected layers thường được sử dụng trong phần cuối cùng của mạng neural, sau khi
thơng tin đã được trích xuất và biểu diễn thông qua các lớp khác như convolutional layers (cho xử
lý dữ liệu hình ảnh) hoặc recurrent layers (cho xử lý dữ liệu chuỗi thời gian).
1.5. Các công cụ
1.5.1. Windows PowerShell
a.
Giới thiệu
Windows PowerShell là một mơi trường dịng lệnh và một ngôn ngữ kịch bản được phát
triển bởi Microsoft cho các hệ điều hành Windows. Nó được thiết kế để thực hiện các tác vụ quản
lý và dòng lệnh một cách mạnh mẽ và hiệu quả hơn so với Command Prompt truyền thống của
Windows.
b.
Tính năng
Ngơn ngữ kịch bản mạnh mẽ: PowerShell cung cấp một ngơn ngữ lập trình kịch bản
mạnh mẽ với khả năng thực hiện các tác vụ phức tạp, xử lý tập tin, quản lý hệ thống, và nhiều
tác vụ khác
12


- Cấu trúc đối tượng: PowerShell xử lý dữ liệu dưới dạng đối tượng, giúp dễ dàng thao tác,
lọc, sắp xếp và biến đổi dữ liệu.
- Thư viện lệnh (cmdlets): PowerShell cung cấp một loạt các lệnh được gọi là "cmdlets"

(command-lets) để thực hiện các tác vụ cụ thể. Mỗi cmdlet thường thực hiện một chức năng cụ thể.
- Khả năng mở rộng: Bạn có thể tạo các script và module tùy chỉnh để mở rộng khả năng
của PowerShell.
- Tương tác với .NET Framework: PowerShell có thể tương tác trực tiếp với .NET
Framework, cho phép bạn sử dụng các thư viện .NET trong script của mình.
1.5.2. Visual Studio Code
a.
Giới thiệu
Visual Studio Code (VS Code) là một trình soạn thảo mã nguồn mã mở, được phát triển bởi
Microsoft. Nó được thiết kế để hỗ trợ các nhà phát triển trong việc viết mã, xây dựng ứng dụng và
thực hiện các tác vụ phát triển khác một cách hiệu quả.
b.
Tính năng
-Mã nguồn mở và đa nền tảng: VS Code là một ứng dụng mã nguồn mở và hồn tồn miễn
phí. Nó có sẵn trên nhiều hệ điều hành, bao gồm Windows, macOS và Linux.
-Môi trường dễ dàng mở rộng: VS Code cho phép bạn cài đặt và sử dụng các tiện ích mở
rộng (extensions) để mở rộng chức năng của trình soạn thảo theo nhu cầu của bạn. Có rất nhiều
tiện ích mở rộng có sẵn cho nhiều ngơn ngữ lập trình và công nghệ khác nhau.
-Giao diện trực quan và dễ sử dụng: VS Code có giao diện người dùng trực quan và thân
thiện, giúp bạn dễ dàng tìm hiểu và sử dụng các tính năng.
-Tích hợp Git: VS Code tích hợp sẵn với Git, giúp bạn quản lý mã nguồn và thực hiện các
thao tác như commit, pull, push một cách dễ dàng.
-Tích hợp terminal: VS Code cung cấp terminal tích hợp trực tiếp trong ứng dụng, giúp bạn
thực hiện các lệnh dòng lệnh và tác vụ hệ thống mà không cần mở cửa sổ terminal riêng biệt.
-Chế độ Debugging: VS Code cung cấp khả năng debug mã nguồn bằng cách liên kết với
trình debug của các ngơn ngữ lập trình khác nhau.
1.5.3. ResNet
b.
Đặc điểm
- Skip Connection (Shortcut Connection): Để thực hiện ý tưởng khối residual, ResNet sử

dụng "skip connections" hoặc "identity shortcut connections". Điều này đơn giản là việc cộng đầu
vào ban đầu vào đầu ra của một khối residual, tạo ra đầu ra cuối cùng.
- Kiến trúc thường được sử dụng: Một trong những kiến trúc phổ biến của ResNet là
ResNet-50, ResNet-101 và ResNet-152. Số này thể hiện số lượng layers, bao gồm cả các lớp tích
chập và các lớp Fully Connected.
- Ứng dụng trong thị giác máy tính: ResNet đã giúp nâng cao hiệu suất trong các nhiệm vụ
như phân loại ảnh, phát hiện đối tượng, nhận dạng khuôn mặt và nhiều ứng dụng khác trong lĩnh
vực thị giác máy tính.
13


- Lớp Batch Normalization và ReLU: ResNet thường sử dụng các lớp Batch Normalization
và ReLU để cải thiện tốc độ huấn luyện và khả năng hội tụ của mơ hình.
a.
Giới thiệu
- ResNet, viết tắt của "Residual Network", là một kiến trúc mạng neural sâu đột phá trong
lĩnh vực học sâu và thị giác máy tính. Nó được giới thiệu bởi Kaiming He, Xiangyu Zhang,
Shaoqing Ren và Jian Sun trong bài báo "Deep Residual Learning for Image Recognition" năm
2015. ResNet đã giải quyết một số vấn đề quan trọng của việc xây dựng các mạng neural sâu và đã
dẫn đến những cải tiến đáng kể trong hiệu suất của các ứng dụng như nhận dạng ảnh và phân loại.
1.5.4. TensorFlow
a. Giới thiệu
TensorFlow là một thư viện phần mềm mã nguồn mở dành cho máy học trong nhiều loại hình
tác vụ nhận thức và hiểu ngơn ngữ. Nó hiện đang được sử dụng cho cả nghiên cứu lẫn sản xuất bởi
50 đội khác nhau trong hàng tá sản phẩm thương mại của Google, như nhận dạng giọng nói,
Gmail, Google Photos và tìm kiếm. TensorFlow nguyên thủy được phát triển bởi đội Google Brain
cho mục đích nghiên cứu và sản xuất của Google và sau đó được phát hành theo giấy phép mã
nguồn mở Apache 2.0 vào ngày 9/11/2015.
Tensorflow là một thư viện có mã nguồn mở, được dùng để tính tốn machine learning với
quy mô lớn. TensorFlow kết hợp một loạt các mơ hình và thuật tốn machine learning cùng deep

learning, từ đó làm cho chúng trở nên hữu ích bằng những phép toán.
TensorFlow cung cấp các API để xây dựng và huấn luyện các mơ hình ML. Các API này có
thể được sử dụng trong nhiều ngơn ngữ lập trình khác nhau, bao gồm Python, C++, Java và Go.
TensorFlow cũng cung cấp các công cụ để xây dựng, huấn luyện và triển khai các mơ hình ML
trên nhiều thiết bị khác nhau, từ máy tính cá nhân đến các máy chủ lớn. TensorFlow có nhiều tính
năng hữu ích cho việc xây dựng và huấn luyện các mơ hình ML. Một số tính năng chính bao gồm:
Tính tốn đồ thị: TensorFlow sử dụng đồ thị tính tốn để biểu diễn các phép tốn và dữ liệu
trong các mơ hình ML. Điều này cho phép TensorFlow tối ưu hóa q trình tính tốn và triển khai
các mơ hình trên nhiều thiết bị khác nhau.
Tính linh hoạt: TensorFlow cho phép bạn xây dựng các mơ hình ML phức tạp với nhiều lớp
và kiến trúc khác nhau. Bạn có thể sử dụng các API của TensorFlow để xây dựng các mơ hình từ
đơn giản đến phức tạp, từ cơ bản đến nâng cao.
Tính di động: TensorFlow có thể chạy trên nhiều thiết bị khác nhau, từ máy tính cá nhân đến
các máy chủ lớn. Điều này cho phép bạn triển khai các mơ hình ML trên nhiều thiết bị khác nhau,
từ điện thoại thông minh đến máy chủ điện tốn đám mây.
Đây là ví dụ đơn giản về TensorFlow: Chúng ta khởi tạo hai biến x và y với giá trị lần lượt
là 3 và 4. Sau đó chúng ta định nghĩa một phép tốn f bằng cách sử dụng các biến và các toán tử.
Cuối cùng ta khởi tạo các biến và chạy đồ thị tính tốn để tính giá trị f
14


Hình 5: Ví dụ cơ bản về TensorFlow.
Trong ví dụ trên, chúng ta khởi tạo 2 biến x và y với giá trị lần lượt là 3 và 4. Sau đó, chúng
ta định nghĩa 1 phép tốn f bằng cách sử dụng các biến và toán tử đã cho. Cuối cùng, chúng ta khởi
tạo các biến và chạy đồ thị tính tốn để tính giá trị của f.

15


b. Các option tải dữ liệu vào TensorFlow

Có hai cách chính để tải dữ liệu vào TensorFlow: Load dữ liệu vào bộ nhớ: Đây là phương
pháp đơn giản nhất. Bạn load tất cả dữ liệu vào bộ nhớ như một mảng đơn. Pipeline dữ liệu
TensorFlow: TensorFlow sở hữu built-in API và nó sẽ giúp bạn load dữ liệu, thực thi các operation
và feed thuật toán machine learning một cách dễ dàng. TensorFlow Dataset API là một công cụ hỗ
trợ xử lý dữ liệu hiệu quả trong TensorFlow. Nó cho phép bạn xây dựng các pipeline đầu vào phức
tạp từ các thành phần đơn giản, có thể tái sử dụng. Ví dụ, pipeline cho một mơ hình ảnh có thể tổng
hợp dữ liệu từ các tệp trong một hệ thống tệp phân tán, áp dụng các biến đổi ngẫu nhiên cho mỗi
hình ảnh và trộn các hình ảnh được chọn ngẫu nhiên thành một batch để huấn luyện. Pipeline cho
một mô hình văn bản có thể liên quan đến việc trích xuất các ký hiệu từ dữ liệu văn bản thô,
chuyển đổi chúng thành các định danh nhúng với một bảng tra cứu và gom nhóm các chuỗi có độ
dài khác nhau lại với nhau. TensorFlow Dataset API cung cấp hai cách khác nhau để tạo một tập
dữ liệu: Xây dựng từ nguồn, chẳng hạn như dữ liệu thô được lưu trữ trong ổ cứng (hình ảnh) hoặc
dữ liệu thơ trong một hoặc nhiều tệp (văn bản). Xây dựng từ một hoặc nhiều đối tượng
tf.data.Dataset.

16


CHƯƠNG II. ỨNG DỤNG CNN TRONG NHẬN DẠNG CHỮ CÁI.
2.1. Giới thiệu bài toán
Bài toán nhận dạng chữ cái viết tay bằng mạng tích chập CNN (Convolutional Neural
Networks) là một bài toán phổ biến trong lĩnh vực học sâu (Deep Learning). Mục tiêu của bài
toán này là xây dựng một mơ hình có khả năng nhận diện và phân biệt các chữ cái viết tay trong
ảnh.
Trong bài toán này, ta sử dụng một bộ dữ liệu hình ảnh của các chữ cái viết tay để huấn
luyện mơ hình. Sau khi huấn luyện, mơ hình có thể nhận diện và phân biệt các chữ cái viết tay
trong ảnh mới
2.2. Tập dữ liệu
Chương trình sử dụng 2 tệp dữ liệu có sẵn là Kaggle A-Z và MNIST
2.3. Kaggle A-Z

Tập dữ liệu "A-Z" trên Kaggle là một bộ dữ liệu chứa các hình ảnh của các chữ cái từ A đến
Z viết tay. Bộ dữ liệu này thường được sử dụng để huấn luyện và kiểm tra các mơ hình máy học và
trí tuệ nhân tạo trong việc nhận dạng chữ viết tay.

Hình 6: Tập dữ liệu “A-Z” trên Kaggle.
2.4. MNIST
MNIST (Modified National Institute of Standards and Technology) là một tập dữ liệu chứa
hình ảnh của các chữ số viết tay từ 0 đến 9. Tập dữ liệu này đã trở thành một trong những tập dữ
liệu phổ biến và quan trọng trong lĩnh vực học máy và trí tuệ nhân tạo.

17


Hình 7: Tập dữ liệu MNIST.
2.5. Các bước thực hiện
2.5.1. Import các thư viện cần thiết

Hình 8: Import các thư viện cần thiết.
2.5.2.

Xây dựng trình và phân tích cú pháp đối số

Hình 9: Đoạn mã xây dựng và phân tích đối số.
2.5.3.

Xử lý dữ liệu từ bộ dữ liệu A-Z và MNIST
18


Hình 10: Đoạn mã xử lý dữ liệu từ bộ dữ liệu A-Z và MNIST.

2.5.4. Khởi tạo và biên dịch mạng lưới CNN
2.5.4.1. Sử dụng SGD (Stochastic Gradient Descent) làn bộ tối ưu hóa với learning rate
‘INIT_LR’.

Hình 11: Đoạn mã sử dụng SGD để tối ưu hóa mơ hình ResNet.
2.5.4.2. Xây dựng mơ hình ResNet

19


Ý tưởng chính đằng sau ResNet là sử dụng kết nối dư thừa, hoặc kết nối bỏ qua, để cho
phép mạng học các hàm dư thừa. Điều này giúp giải quyết vấn đề biến mất gradient và cho phép
đào tạo các mạng rất sâu.
Lớp ResNet với hai phương thức tĩnh: residual_module và build.
Phương thức residual_module định nghĩa một mô-đun dư thừa duy nhất, bao gồm nhiều lớp
tích chập với chuẩn hóa batch và kích hoạt ReLU. Phương thức build xây dựng tồn bộ mơ hình
ResNet bằng cách xếp chồng nhiều mơ-đun dư thừa lên nhau.
2.5.4.2.1 Phương thức residual_module

Hình 12: Xây dựng hàm residual_module.
Hàm residual_module, là một phần của kiến trúc ResNet. Hàm này nhận nhiều đối số, bao
gồm data, là đầu vào cho mô-đun dư thừa, K, là số lượng bộ lọc trong các lớp tích chập, stride,
20



×