TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG ********** Báo cáo bài tập lớn Môn Học sâu và ứng dụng ĐỀ TÀI: Sử dụng mạng CNN phân loại chữ số viết tay Giảng
Trang 1
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI VIỆN CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
**********
Báo cáo bài tập lớn Môn Học sâu và ứng dụng
ĐỀ TÀI: Sử dụng mạng CNN phân loại chữ số viết tay
Giảng viên hướng dẫn : TS Trịnh Anh Phúc Sinh viên thực hiện :
Hà Nội, 12 – 2020
Trang 2MỤC LỤC
Lởi cảm ơn 3
Phần mở đầu 4
Phần nội dung 5
1 Mô tả bài toán 5
2 Giới thiệu mô hình 5
2.1 Tổng quan kiến trúc mạng mô hình sử dụng 5
2.2 Lớp 2 6
2.3 Lớp 3 6
2.4 Lớp 4 6
2.5 Lớp 5 6
2.6 Lớp 6 6
2.7 Lớp 7 6
3 Bộ dữ liệu hình ảnh 7
4 Kết quả thực nghiệm 9
4.1 Cấu hình Google Colab: 9
4.2 Cấu hình phần mềm: 9
4.3 Độ đo đánh giá 10
4.4 Hàm mất mát 10
4.5 Thời gian train, test 11
Phần kết luận 13
Trang 3Lởi cảm ơn
Lời đầu tiên cho phép chúng em được gửi lời cảm ơn tới thầy Trịnh Anh Phúc giảng viên môn Học sâu và ứng dụng, cảm ơn thầy đã dạy cho chúng em những kiến thức rất hay về Deep Learning, cảm ơn thầy vì những tiết học nhiều kiến thức nhưng cũng đầy thư giãn, mang lại cho chúng em niềm say mê học tập để có thể hoàn thành bài tập lớn của môn học
Tuy nhiên, với những kiến thức cơ bản học được, bài tập lớn của chúng em chắc chắn vẫn còn tồn tại nhiều sai sót, rất mong nhận được các góp ý từ thầy
Em xin chân thành cảm ơn!
Trang 4Phần mở đầu
Hiện nay, thuật ngữ Deep Learning đang trở nên phổ biến Deep Learning – học sâu là một tập hợp các các máy học nơi các mạng nơ-ron nhân tạo, các thuật toán mô phỏng bộ não con người, học hỏi từ một lượng lớn dữ liệu
Mỗi ngày chúng ta tạo ra khoảng 2.6 nghìn tỷ bytes dữ liệu, đó chính là nguồn học của các thuật toán học sâu Vì vậy, học sâu trong những năm gần đây đã có những bước phát triển như vũ bão, một số ví dụ trong thực tế của học sâu: trợ lý ảo, các ứng dụng tự động dịch giữ các ngôn ngữ, nhận diện khuôn mặt, xe tự hành,…
Để có những hiểu biết về các mạng học sâu, trong khuôn khổ môn học Học sâu và ứng dụng, chúng em lựa chọn đề tài sử dụng mạng CNN để nhận diện chữ số viết tay
Trang 5Phần nội dung
1 Mô tả bài toán
Nhận diện chữ số viết tay sử dụng bộ dữ liệu MNIST Bộ dữ liệu gồm 70000 mẫu dữ liệu
về các chữ số từ 0 đến 9 Mô hình được huấn luyện với 60000 mẫu dữ liệu và được kiểm tra bằng 10000 mẫu dữ liệu còn lại Bài toán nhận diện chữ số viết tay đọc dữ liệu ảnh đầu vào là ảnh của chữ số cần đoán nhãn, sử dụng mô hình đã được huấn luyện để dự đoán nhãn cho ảnh đó
2 Giới thiệu mô hình
2.1 Tổng quan kiến trúc mạng mô hình sử dụng
LeNet-5 là một kiến trúc mạng CNN cũ, được phát triển vào năm 1998 bởi Andre LeCun, Leon Bottou, Yoshua Bengio, và Patrick Hafner LeNet-5 được dùng cho nhận dạng chữ viết tay và trở thành cơ sở thiết kế cho các mạng lớn hơn sau này
Trong bài này, chúng em sử dụng kiến trúc mạng Lenet-5 nhưng có một chút thay đổi, cụ thể là thay lớp AVG Pooling bằng lớp Max Pooling và hàm kích hoạt sau các tầng tích chập và tầng kết nối đầy đủ là ReLU
Kiến trúc mô hình:
2.1 Lớp 1
Lớp đầu tiên là lớp tích chập nhận đầu vào là ảnh kích thước 28x28x1 Nó sử dụng 6 hạt nhân kích thước 5x5x1, thực hiện tích chập padding “same”, bước nhảy bằng 1 tạo ra một
Trang 6tensor kích thước 28x28x6 Tensor này được chuyển qua một hàm kích hoạt ReLU, sau
đó trở thành đầu vào cho lớp 2
2.2 Lớp 2
Lớp 2 là lớp gộp max pooling, nhận đầu vào là tensor kích thước 28x28x6 Lớp này thực hiện lấy mẫu con không đệm, bằng cách sử dụng hạt nhân kích thước 2x2 với bước nhảy
là 2 tạo ra tensor kích thước 14x14x6 đi tới lớp 3 trở thành đầu vào
2.3 Lớp 3
Lớp 3 là lớp tích chập, đầu vào là tenensor kích thước 14x14x6 Lớp này sử dụng 16 hạt nhân kích thước 5x5x6, thực hiện tích chập không đệm, bước nhảy bằng 1 thu được tensor kích thước 10x10x16, tensor này được đưa qua hàm kích hoạt ReLU và trở thành đầu vào cho lớp tiếp theo
2.4 Lớp 4
Lớp 4 là một lớp gộp max pooling, đầu vào của nó là tensor 10x10x16 kích thước hạt nhân 2x2 bước nhảy bằng 2 Đầu ra của lớp này là tensor 5x5x16
2.5 Lớp 5
Lớp 5 là kết nối đầy đủ (Dense), nhận đầu vào là một vector được duỗi ra từ tensor 5x5x16 (đầu ra của lớp 4), hàm kích hoạt ReLU, đầu ra là 1 vector kích thước 120
2.6 Lớp 6
Lớp 6 là một lớp kết nối đầu đủ, vector đầu vào kích thước 120, hàm kích hoạt ReLU, vector đầu ra kích thước 84
2.7 Lớp 7
Lớp 7 là lớp kết nối đầu đủ, lấy đầu ra của lớp 6 làm đầu vào, sử dụng kích hoạt softmax
để tiến hành phân loại cho 10 lớp tương ứng 10 node đầu ra
Trang 7Tổng kết các lớp:
Parameters Operations
1:
convolutiona
l layer
28x28x1
6 kernel (5,5) padding=”same”
stride=1 activate fuction: ReLU
28x28x6 6x5x5x1+6
=156 (5x5x1)x(28x28x6) =117600
2: max
pooling 28x28x6 kernel(2,2)
padding=0 stride=2
14x14x6
-3:
convolutiona
l layer
14x14x6
16 kernel (5,5) padding=0 stride=1 activate function: ReLU
10x10x16 16x5x5x6+16
=2416 (5x5x6)x(10x10x16 )
=240000
4: max
pooling 10x10x16 kernel (2,2)
padding=0 stride=2
5x5x16
-5: full
connected 400(=5x5x16) activate function: ReLU 120 120x400+120 =48120 120x400 =48000
6:full
connected 120 activate function: ReLU 84 84x120+84 =10164 120x84 =10080
7: full
connected 84 activate function: ReLU 10 84x10+10 =850 84x10 =840
Tổng 61706 416520
3 Bộ dữ liệu hình ảnh
Trong bài toán này sử dụng bộ dữ liệu MNIST là bộ cơ sở về chữ số viết tay, được cải biên từ bộ cơ sở dữ liệu gốc của NIST giúp dễ sử dụng hơn MNIST là tập hợp gồm
70000 mẫu ảnh chứa dữ liệu về các chữ số viết tay từ 0 đến 9 Trong đó dữ liệu huấn luyện là 60000 và dữ liệu test là 10000 mẫu ảnh Mỗi mẫu ảnh gồm 2 phần là một hình ảnh grayscale của một kí tự chữ số kích thước 28x28 và một nhãn tương ứng với nó
Trang 8Hình 1: Một số hình ảnh về mẫu dữ liệu của MNIST
Thống kê trên hai tập train, test:
Trang 9Hình 2: Biểu đồ thống kê trên 2 tập train, test của MNIST
4 Kết quả thực nghiệm
4.1 Cấu hình Google Colab:
Cấu hình phần cứng Google colab:
- GPU: Tesla K80, driver version 418.67, memory 11441 MiB
- CPU: Single core Intel Xeon (-MT-) cache: 56320 KB
clock speeds: max: 2200 MHz 1: 2200 MHz 2: 2200 MHzMemory: 13 GB
4.2 Cấu hình phần mềm:
Sử dụng bộ thư viện Keras với các module sau:
- keras.datasets.mnist
- keras.layers.Conv2D
- keras.layers.MaxPooling2D
- keras.layers.Dense
- keras.layers.Flatten
- keras.models.Sequential
- Keras.utils.np_utils
Sử dụng bộ thư viện bổ sung sau:
- matplotlib.pyplot
Trang 10- numpy
4.3 Độ đo đánh giá
Có nhiều cách để đánh giá một mô hình phân lớp: accuracy score, confusion matrix, ROC curve, Area Under the Curve, Precision and Recall, F1 score, Top R error,… Tuy nhiên,
để cho đơn giản, trong bài toán này, chúng em sử dụng accuracy score (độ chính xác) Đây là cách đánh giá dựu trên tỉ lệ giữa số dự đoán đúng trên tổng số dự đoán trong tập test
4.4 Hàm mất mát
Các nhãn trong bài toán được chuyển đổi về dạng one-hot vector:
Hàm activation tại lớp cuối cùng là hàm softmax: nhận đầu vào là một mảng số thực và đầu ra là một phân phối xác suất với mỗi phần tử nằm trong khoảng [0, 1] và tổng các phần tử bằng 1 Giá trị của label dạng one-hot và kết quả dự đoán sau hàm softmax là có cùng kích thước
Trang 11Hàm “categorical_crossentropy“ trong Keras:
L=−∑
i
M
y ilog(^y i)
Với ^y là giá trị nhãn mà mô hình dự đoán ra, y là nhãn thực, M là số lượng lớp dữ liệu Hàm này tính toán độ chênh lệch giữa giá trị dự đoán và nhãn thực của dữ liệu Giá trị L
càng nhỏ thì model dự đoán càng gần với giá trị thực
4.5 Thời gian train, test
Trainning tập dữ diệu huấn luyện 60000 mẫu dữ liệu với batch-size=32, epoch=20 hết 100s 60ms thu được độ chính xác training accuracy=0.9945
Thời gian test 10000 mẫu dữ liệu hết 1s, độ chính xác testing accuracy=0.9847, test loss
là 0,0769 Một số hình ảnh dự đoán sai:
Trang 13Phần kết luận
Mô hình sau khi chỉnh sửa so với mô hình gốc có tỉ lệ lỗi khá cao 1,53%, cần có những tìm hiểu sâu hơn để cải tiến mô hình Tuy nhiên về cơ bản, chúng em đã hiểu được các tầng trong mô hình gốc và có thể tùy biến mô hình theo ý, từ đó có thể tự tạo ra các mô hình phục vụ cho các bài toán khác nhau trong tương lai