BÁO CÁO BÀI TẬP LỚN XÂY DỰNG MẠNG MULTI-LAYER PERCEPTRON SỬ DỤNG NGÔN NGỮ LẬP TRÌNH C++ Giảng viên: ThS. Nguyễn Quỳnh Chi Sinh viên: Nguyễn Thế An B17DCCN002 Đào Hoàng Mai B17DCCN411 Nguyễn Thành Long B17DCCN396 Nguyễn Hữu Long B17DCCN395 Phùng Hà My B17DCCN431 Hà Nội, 06/2021 LỜI NÓI ĐẦU Trong cuộc cách mạng công nghiệp 4.0 hiện nay, yếu tố quyết định thành công trong mọi lĩnh vực luôn gắn với dữ liệu và việc khai thác dữ liệu hiệu quả. Dữ liệu ngày càng trở nên dồi dào, phong phú đã đem lại lợi ích to lớn cho các doanh nghiệp và ý nghĩa lớn lao cho những nhà khoa học nghiên cứu dữ liệu. Tuy nhiên, điều đó cũng đem đến cho công cuộc khám phá ra những thông tin tiềm ẩn bên trong chúng những thách thức mới. Lúc này, các mạng thần kinh nhân tạo được lấy cảm hứng từ bộ não sinh học đã chứng minh được sự hữu ích của mình khi đạt được những kết quả vượt trội trong các bài toán cốt lõi của khai phá dữ liệu như phân loại dữ liệu, nhận dạng ảnh, nhận dạng giọng nói, v.v. Trong đó, Multi-layer Perceptron là một mạng thần kinh nhân tạo tuy đơn giản nhưng rất hiệu quả và có ý nghĩa trong các bài toán thực tế. Từ những kiến thức của môn học “Kho dữ liệu và khai phá dữ liệu”, cùng với những thông tin học hỏi từ Internet, chúng em đã tìm hiểu và quyết định chọn đề tài “Xây dựng Multi-layer Perceptron sử dụng ngôn ngữ lập trình C++” là đề tài cho bài tập lớn của nhóm. Mô hình đã được kiểm nghiệm với 3 tập dữ liệu khác nhau và so sánh với framework Tensorflow để kiểm chứng độ chính xác.
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN I
Giảng viên: ThS Nguyễn Quỳnh Chi
Sinh viên: Nguyễn Thế An B17DCCN002
Hà Nội, 06/2021
Trang 2LỜI NÓI ĐẦU
Trong cuộc cách mạng công nghiệp 4.0 hiện nay, yếu tố quyết địnhthành công trong mọi lĩnh vực luôn gắn với dữ liệu và việc khai thác
dữ liệu hiệu quả Dữ liệu ngày càng trở nên dồi dào, phong phú đãđem lại lợi ích to lớn cho các doanh nghiệp và ý nghĩa lớn lao chonhững nhà khoa học nghiên cứu dữ liệu Tuy nhiên, điều đó cũng đemđến cho công cuộc khám phá ra những thông tin tiềm ẩn bên trongchúng những thách thức mới Lúc này, các mạng thần kinh nhân tạođược lấy cảm hứng từ bộ não sinh học đã chứng minh được sự hữu íchcủa mình khi đạt được những kết quả vượt trội trong các bài toán cốtlõi của khai phá dữ liệu như phân loại dữ liệu, nhận dạng ảnh, nhậndạng giọng nói, v.v Trong đó, Multi-layer Perceptron là một mạng thầnkinh nhân tạo tuy đơn giản nhưng rất hiệu quả và có ý nghĩa trongcác bài toán thực tế
Từ những kiến thức của môn học “Kho dữ liệu và khai phá dữliệu”, cùng với những thông tin học hỏi từ Internet, chúng em đã tìmhiểu và quyết định chọn đề tài “Xây dựng Multi-layer Perceptron sửdụng ngôn ngữ lập trình C++” là đề tài cho bài tập lớn của nhóm
Mô hình đã được kiểm nghiệm với 3 tập dữ liệu khác nhau và sosánh với framework Tensorflow để kiểm chứng độ chính xác
Chúng em xin bày tỏ sự biết ơn sâu sắc của mình tới cô NguyễnQuỳnh Chi, giảng viên môn “Kho dữ liệu và Khai phá dữ liệu”, đãhướng dẫn, chỉ dạy tận tình và cho chúng em rất nhiều các bài họcquý giá về sự tìm tòi, tự học hỏi và chủ động trong học tập Thôngqua môn học của cô và báo cáo này, chúng em không chỉ tìm hiểuthêm được những kiến thức mới mà còn đào sâu hơn và củng cố cáckiến thức đã có, nâng cao khả năng làm việc nhóm để đạt được hiệuquả cao Trong suốt quá trình học tập và tìm hiểu, mặc dù đã cố gắnghết sức nhưng do kiến thức và kinh nghiệm còn non nớt nên báo cáocòn nhiều những thiếu sót và hạn chế Vì vậy chúng em rất mong côgóp ý để báo cáo của chúng em được hoàn thiện hơn
Chúng em xin chân thành cảm ơn cô!
Trang 3Mục lục
LỜI NÓI ĐẦU
1.1 Tổng quan về bài toán phân loại 2
1.2 Mạng thần kinh nhân tạo 3
1.2.1 Tổng quan về mạng thần kinh nhân tạo 3
1.2.2 Mạng Multi-layer Perceptron 4
2 MULTI-LAYER PERCEPTRON 6 2.1 Các ký hiệu và khái niệm 7
2.1.1 Layer - Lớp 7
2.1.2 Unit - Đơn vị 7
2.1.3 Weights và Biases 8
2.1.4 Activation Function - Hàm kích hoạt 9
2.1.5 Loss Function - Hàm mất mát 11
2.2 Học trong MLP 12
2.2.1 Feedforward - Lan truyền thẳng 12
2.2.2 Backpropagation - Lan truyền ngược 12
Trang 43 LẬP TRÌNH VÀ MÃ NGUỒN 15
3.1 Lập trình 16
3.2 Mã nguồn C++ 18
3.2.1 Định nghĩa các hàm 18
3.3 Mã nguồn Python 20
4 KIỂM NGHIỆM 22 4.1 Bộ dữ liệu 23
4.1.1 Optical Recognition of Handwritten Digits Dataset 23 4.1.2 Spambase Dataset 24
4.1.3 Mushroom Dataset 25
4.2 Kết quả 26
4.2.1 Kết quả chính 27
4.2.2 Phân tích kết quả và đánh giá 29
Trang 5Chương 1
TỔNG QUAN
Trong chương 1, báo cáo sẽ giới thiệu về bài toán phân loại, một bàitoán điển hình trong khai phá dữ liệu, đồng thời cũng trình bày tổngquan về mạng thần kinh nhân tạo thông qua các phần:
• Tổng quan về bài toán phân loại
• Mạng thần kinh nhân tạo
Trang 61.1 Tổng quan về bài toán phân loại
Phân loại (classification) là một dạng thuật toán dự đoán lớp của cácđối tượng dữ liệu đã cho với đầu ra là các giá trị rời rạc Các lớpnày đôi khi được gọi là mục tiêu, nhãn hoặc danh mục Thuật toánnày thường được gọi là phân loại nhị phân (binary classification) vớinhiệm vụ phân loại chỉ có 2 lớp, và phân loại nhiều lớp (multi-classclassification) với các bài toán có từ 3 lớp phân loại trở lên Phân loại
là một thuật toán nằm trong nhóm thuật toán học có giám sát, nghĩa
là bộ dữ liệu được sử dụng trong quá trình huấn luyện được gán sẵnnhãn đúng Thuật toán này có nhiệm vụ xấp xỉ hay mô hình một ánh
xạ (f) từ các biến đầu vào x đến các biến đầu ra rời rạc y bằngviệc sử dụng một bộ dữ liệu huấn luyện đã biết trước đầu ra (hay lớp/nhãn) Sau đó, trong quá trình thử nghiệm, mô hình có thể nhận biếtđược nhãn của các điểm dữ liệu chưa biết Một ví dụ điển hình choloại thuật toán này là bài toán phát hiện thư rác cho các nhà cungcấp dịch vụ email Khi đó, đầu vào của bài toán là các thư điện tử(bao gồm nội dung, tiêu đề, tài khoản người gửi, v.v) và đầu ra là mộttrong hai lớp “tích cực” hoặc lớp “tiêu cực” Lớp “tích cực” nghĩa làthư điện tử đầu vào là một thư rác và ngược lại với lớp “tiêu cực”.Đây là bài toán phân loại nhị phân (binary classification) vì chỉ có hailớp là “thư rác” và “không phải thư rác”
Thuật toán phân loại là một thuật toán quan trọng, được ứng dụngrộng rãi trong khai phá dữ liệu do nó có khả năng tự động phân loại
dữ liệu vào các nhóm khác nhau, đặc biệt là với các bộ dữ liệu lớn,
mà không cần lập trình cụ thể Việc phân loại dữ liệu sẽ giúp cho quátrình trích xuất các thông tin từ các điểm dữ liệu thuộc các nhóm khácnhau trở nên dễ dàng và hiệu quả hơn Có tương đối nhiều các thuậttoán thuộc lớp thuật toán phân loại, có thể kể đến điển hình như K-mean, Naive Baysian Network, Support Vector Machines, Decision Tree,Neural Network, Trong thực tế, người ta thường sử dụng các thuậttoán thuộc họ Neural Network do chúng có khả năng phân loại chínhxác vượt trội so với các thuật toán cổ điển
Trang 71.2 Mạng thần kinh nhân tạo
1.2.1 Tổng quan về mạng thần kinh nhân tạo
Mạng thần kinh nhân tạo (ANN) [11], thường được gọi đơn giản làmạng neural (NN), là các hệ thống tính toán được lấy cảm hứng từcác mạng neuron sinh học cấu thành não động vật Trong hình 1.1 ta
có thể thấy một tế bào thần kinh sinh học có thể nhận nhiều tín hiệuđầu vào và cho một tín hiệu đầu ra duy nhất
Hình 1.1: Một neuron thần kinh trong bộ não sinh học
Các neuron thần kinh nhân tạo cũng có cơ chế nhận và truyềnthông tin tương tự như vậy, được thể hiện trong hình 1.2
Hình 1.2: Một neuron nhân tạo - hay một perceptron
Trang 8Như vậy, dựa trên ý tưởng về bộ não, ANN là một tập hợp các đơn
vị hoặc nút kết nối với nhau được gọi là tế bào thần kinh nhân tạohay perceptron, mô hình hóa các cấu trúc mạng lưới thần kinh trong
bộ não sinh học Mỗi kết nối, giống như khớp thần kinh trong nãođộng vật, có thể truyền tín hiệu từ tế bào thần kinh này đến tế bàothần kinh khác Một tế bào thần kinh nhân tạo nhận một tín hiệu sau
đó xử lý nó và có thể phát tín hiệu cho các tế bào thần kinh kếtnối với nó “Tín hiệu” đi vào một kết nối là một số thực và đầu racủa mỗi nơ-ron được tính bằng một số hàm phi tuyến của tổng cácđầu vào của nó Các kết nối thường đi kèm các trọng số, có nhiệm
vụ làm tăng hoặc giảm cường độ của tín hiệu, được điều chỉnh trongquá trình học tập Tế bào thần kinh có thể có ngưỡng sao cho tín hiệuđược gửi đi chỉ khi tín hiệu tổng hợp vượt qua ngưỡng đó Các mạngthần kinh nhân tạo còn được biến thể thành nhiều dạng khác nhau,
ví dụ như Multi-layer Perceptron (mạng neural nhiều lớp), ConvolutionalNeural Network (mạng neural tích chập) [8] - thường được sử dụng vớicác dữ liệu dạng ảnh, Recurrent Neural Network (mạng neural hồi quy)[6] - thường áp dụng cho các dữ liệu dạng chuỗi như văn bản, video,
âm thanh, v.v
1.2.2 Mạng Multi-layer Perceptron
Multi-layer Perceptron (MLP) là một mô hình mạng nơ-ron được tạo
ra từ sự liên kết của các perceptron chia làm nhiều nhóm, mỗi nhómtương ứng với một lớp Các mạng MLP đôi khi còn được gọi là “vanilla”neural network, đặc biệt là khi mạng này chỉ có một lớp ẩn duy nhất.Một MLP bao gồm ít nhất ba loại lớp: lớp đầu vào, lớp ẩn và lớpđầu ra Ngoại trừ các nút đầu vào, mỗi nút là một neuron sử dụnghàm kích hoạt phi tuyến MLP sử dụng một kỹ thuật học tập có giámsát được gọi là backpropagation để đào tạo Đặc điểm có nhiều lớp và
sử dụng hàm kích hoạt phi tuyến tính giúp MLP phân biệt với mộtperceptron tuyến tính Cũng vì vậy, MLP có thể phân biệt các lớp dữliệu không thể phân tách tuyến tính Hình 1.3 là ví dụ cho một mạng
Trang 9và nhiều hidden layers (lớp ẩn).
Hình 1.3: Một ví dụ về mạng Multi-layer Perceptron
Hiện nay, với cú pháp đơn giản và có nhiều framework hỗ trợ,Python đang là ngôn ngữ được sử dụng nhiều nhất trong lĩnh vực họcmáy và khai phá dữ liệu Tuy nhiên, so với các thư viện sử dụng ngônngữ Python, C++ cũng sở hữu các điểm mạnh rõ ràng như là một ngônngữ được nhập tĩnh, vì vậy đoạn mã sẽ không có lỗi nhập xuất hiệntrong thời gian chạy, các đoạn mã nhỏ gọn và có thời gian chạy nhanhhơn, cho phép hiệu suất tính toán cao so với các thuật toán được thựchiện hoàn toàn bằng Python hoặc MATLAB [3] Vì vậy, trong báo cáonày, chúng em sẽ xây dựng một mô hình mạng Multi-layer Perceptron
sử dụng ngôn ngữ C++ để giải quyết bài toán phân loại với các bộ dữliệu khác nhau Ở các phần tiếp theo, báo cáo sẽ trình bày chi tiết về
cơ sở lý thuyết của mạng MLP trong chương 2, quá trình xây dựng môhình và mã nguồn C++ trong chương 3, đồng thời cũng sử dụng cácphương pháp định lượng để kiểm nghiệm lại các đoạn mã do nhóm lậptrình trên các bộ dữ liệu khác nhau trong chương 4
Trang 112.1 Các ký hiệu và khái niệm
2.1.1 Layer - Lớp
Ngoài input layer (lớp đầu vào) và output layer (lớp đầu ra), mạngMLP có thể có nhiều hidden layers (lớp ẩn) ở giữa Các hidden layerstrong mạng tính từ lớp đầu vào đến lớp đầu ra lần lượt được đánh thứ
tự là lớp ẩn 1, lớp ẩn 2, Hình 2.1 là ví dụ cho một mạng MLP có
một input layer , một output layer và hai hidden layers Số lượng layertrong một MLP, được ký hiệu là L, được tính bằng số lớp ẩn cộng vớimột Tức là khi đếm số lượng lớp của một mạng MLP, ta không tínhlớp đầu vào Trong hình 2.1, L= 3
Hình 2.1: Mạng perceptron nhiều tầng với 2 hidden layers
2.1.2 Unit - Đơn vị
Trong hình 2.2, một node hình tròn màu cam trong một layer đượcgọi là một unit Unit ở các input layer, hidden layers, và output layerđược lần lượt gọi là input unit, hidden unit, và output unit Trong đó,đầu vào của các hidden layer được ký hiệu bởi z, đầu ra của mỗi unitthường được kí hiệu là a (thể hiện activation, tức là giá trị của mỗiunit sau khi ta áp dụng activation function lên z) Đầu ra của unit thứ
Trang 12i trong layer thứ l được kí hiệu là a(l)i Giả sử thêm rằng số unit tronglayer thứ l (không tính bias) là d(l) thì vector biểu diễn đầu ra củalayer thứ l được ký hiệu là a(l) ∈Rd(l).
Hình 2.2: Các ký hiệu sử dụng trong mạng Multi-layer Perceptron
2.1.3 Weights và Biases
Các ký hiệu cho weight và bias của mạng MLP được ký hiệu như ởhình 2.2 Theo đó, có L ma trận trọng số cho một MLP có L layers.Các ma trận này được ký hiệu là W(l) ∈ Rd(l−1)×d(l), l = 1,2, , L trong
đó W(l) thể hiện các kết nối từ layer thứ l −1 tới layer thứ l (nếu tacoi input layer là layer thứ 0) Cụ thể hơn, phần từ w(l)ij thể hiện kếtnối từ node thứ i của layer thứ (l −1) tới node thứ j của layer thứ (l).Các bias của layer thứ (l) được ký hiệu là b(l) ∈ Rd(l) Tập hợp cácweight và bias lần lượt được ký hiệu là W và b
Trang 132.1.4 Activation Function - Hàm kích hoạt
Mỗi output của một layer (trừ input layer) sẽ được tính toán dựa vàocông thức 2.1:
a(l) =f(l)(W(l)Ta(l−1)+b(l)) (2.1)Trong đó f(l)(.) là một hàm kích hoạt phi tuyến Nếu hàm kích hoạttại một layer là một hàm tuyến tính, layer này và layer tiếp theo có thể
rút gọn thành một layer vì hợp của các hàm tuyến tính là một hàm tuyến
tính Hàm kích hoạt thường là một hàm số áp dụng lên từng phần tửcủa ma trận hoặc vector đầu vào, nói cách khác, hàm kích hoạt thường
là element-wise (trừ hàm Softmax) Trong báo cáo này, chúng em sẽ sử
dụng hàm kích hoạt ReLU cho các hidden layers và hàm Softmax chooutput layer
Trang 14thức rất đơn giản và có lợi về mặt tính toán Đạo hàm của nó bằng 0tại các điểm âm, bằng 1 tại các điểm dương ReLU được chứng minhgiúp cho việc huấn luyện các multilayer neural network và deep network(rất nhiều hidden layer) nhanh hơn rất nhiều so với các hàm kích hoạtkhác như hàm tanh [5], hàm sigmoid Hình 2.4 so sánh tốc độ hội tụcủa hàm mất mát khi sử dụng hai hàm kích hoạt ReLU và tanh Rõràng có thể nhận thấy, tốc độ hội tụ khi sử dụng hàm ReLU cho kếtquả nhanh hơn nhiều lần so với hàm tanh Điều này có thể giải thíchđược là vì ReLU được tính toán gần như tức thời và gradient của nócũng được tín rất nhanh Mặc dù cũng có nhược điểm đạo hàm bằng 0với các giá trị đầu vào âm, ReLU được chứng minh bằng thực nghiệmrằng có thể khắc phục việc này bằng cách tăng số hidden units 1.
Hình 2.4: So sánh tốc độ hội tụ của ReLU và tanh sau các epoch
Softmax
Với các bài toán phân loại, ta cần một mô hình xác suất sao cho vớimỗi input x, ta có đầu ra là vector a ∈ RM với M là số lượng lớpcủa bài toán và ai đại diện cho xác suất để input đó rơi vào lớp thứ
i Điều kiện cần là các ai phải dương và tổng của chúng phải bằng 1
Trang 15Đồng thời, ta cũng cần một quan hệ đồng biến giữa z i và a i, nghĩa lànếu zi càng lớn, xác suất để điểm dữ liệu x rơi vào lớp thứ i càngcao Như vậy, ta có hàm Softmax có thể đảm bảo được các điều kiện
đã nêu trên, đồng thời đơn giản về mặt tính toán như sau:
ai= exp(zi)
PC j=1 exp(z j), ∀i= 1,2 , C (2.2)Lúc này, ta có thể coi xác suất để một điểm dữ liệu x rơi vào lớpthứ i nếu biết tham số mô hình là ma trận trọng số W bằng a i:
p(yk =i|xk;W) =ai (2.3)
2.1.5 Loss Function - Hàm mất mát
Quan hệ giữa phép đánh giá mô hình (tốt hay không tốt) và các trọng
số của mô hình thường được mô tả thông qua một hàm số gọi là hàmmất mát Hàm mất mát đo độ chênh lệch giữa đầu ra dự đoán và đầu
ra thực sự để đánh giá mô hình được huấn luyện có hiệu quả haykhông Việc đi tìm các trọng số của mạng sao cho việc huấn luyện làhiệu quả nhất đồng nghĩa với việc đi tối thiểu hàm mất mát Trong báocáo này, chúng em sử dụng hàm mất mát cross-entropy do nó có thờigian huấn luyện ít hơn và cho khả năng tổng quát hóa cao hơn so vớisai số tổng bình phương (mean squared error) [4] Trong phân loại nhịphân, tức là số lượng lớp phân loại C = 2, hàm mất mát cross-entropy
có thể được tính toán như sau:
J(y, yˆ) =−(ylog(ˆy) + (1− y)log(1− yˆ)) (2.4)Nếu C > 2 (phân loại nhiều lớp), hàm cross-entropy lúc này sẽ đượcgọi là categorical cross-entropy Cụ thể, ta sẽ tính độ mất mát cho từnglớp riêng biệt và cộng tổng các kết quả như sau:
J(y, ˆ y) =−
CXi=1
y i log(ˆy i) (2.5)
Trang 162.2 Học trong MLP
2.2.1 Feedforward - Lan truyền thẳng
Quá trình lan truyền thẳng chính là quá trình tính toán ra output củamạng với một input sample Trong lan truyền thẳng, một sample đi quainput layer để trở thành input của mạng, sau đó đầu ra của các hiddenlayers được tính toán bởi các trọng số và các hàm kích hoạt lần lượtcho đến khi ta có được output của hidden layer cuối cùng Lúc này,vector output của hidden layer cuối cùng sẽ được truyền vào outputlayer, được tính toán lại bởi hàm kích hoạt softmax và cho ra outputcuối cùng Sau đó, hàm mất mát sẽ được tính toán để phục vụ cho quátrình lan truyền ngược tiếp ngay sau đó Giai đoạn lan truyền thẳng sẽđược tóm tắt bằng các công thức sau đây:
• Gán input cho input layer:
2.2.2 Backpropagation - Lan truyền ngược
Trong báo cáo này, chúng em sử dụng thuật toán gradient descent (GD),
cụ thể là mini-batch gradient descent để tối ưu mạng MLP do đây là
Trang 17được sử dụng Mini-batch ở đây được hiểu là các weights và biases sẽđược cập nhật sau một tập các điểm dữ liệu GD có thể được sử dụng
để tính gradient cho các ma trận trọng số và biases dựa trên một cặpđiểm dữ liệu huấn luyện x, y, tức là các trọng số được cập nhật lại saumỗi một cặp điểm dữ liệu Để áp dụng được thuật toán SGD, chúng
ta cần tính được đạo hàm của hàm mất mát theo từng ma trận trọng
số W(l) và vector bias b(l)
Giả sử J(W, b, X, Y) là một hàm mất mát của bài toán, trong đó
W, b là tập hợp tất cả các ma trận trọng số giữa các layer và vectorbias của mỗi layer X, Y là cặp dữ liệu huấn luyện với mỗi cột tươngứng với một điểm dữ liệu Để có thể áp dụng các phương pháp gra-dient descent, chúng ta cần tính được các ∇W( l ) J;∇(l)b J, ∀l = 1,2, , L.Tuy nhiên, việc tính toán trực tiếp các giá trị đạo hàm là cực kỳ phứctạp vì hàm mất mát không phụ thuộc trực tiếp vào các ma trận hệ
số và vector bias Phương pháp phổ biến nhất được sử dụng để giảiquyết vấn đề này có tên là backpropagation - thuật toán cho phép tatính đạo hàm ngược từ layer cuối cùng đến layer đầu tiên Layer cuốicùng được tính toán trước vì nó gần gũi với đầu ra dự đoán và hàmmất mát nhất Việc tính toán đạo hàm của các ma trận hệ số trongcác layer trước được thực hiện dựa trên một quy tắc chuỗi quen thuộccho đạo hàm của hàm hợp
Hình 2.5: Mô phỏng cách tính lan truyền ngược
Trang 18Đạo hàm của hàm mất mát theo một thành phần của ma trận trọng
số của output layer:
∂J
∂wij(L)
= ∂J
∂z(l)j. ∂z
(l) j
∂J
∂b(L)j
= ∂J
∂zj(L).∂z
(L) j
2 Với mỗi unit j ở output layer, tính:
Trang 19• Lập trình
• Mã nguồn C++
• Mã nguồn Python
Trang 203.1 Lập trình
Cấu trúc dự án xây dựng mô hình mạng neural MLP sử dụng ngônngữ C++ của chúng em bao gồm các phần chính như sau:
• data: folder lưu trữ dữ liệu
Hình 3.1: Folder data chứa dữ liệu cho quá trình huấn luyện và thử
Trang 21• lib: folder chứa các module để xây dựng model
Hình 3.2: Các module được sử dụng để xây dựng mô hình
• train.cpp: chương trình xây dựng và huấn luyện mô hình
• test.cpp: chương trình thử nghiệm và đánh giá mô hình
Hình 3.3: Các chương trình huấn luyện và thử nghiệm mô hình
Đối với mã nguồn Python (dùng để kiểm chứng), chúng em sử dụngframework Tensorflow 2.0 cùng một số thư viện hỗ trợ của Python baogồm: