EBOOKBKMT là nơi phân chia sẻ, search kiếm Sách, bài bác giảng, slide, luận văn, đồ dùng án, đái luận, nghiên cứu phục vụ cho việc học tập ở số đông các ngành nhiệt Lạnh, tích điện mới, Cơ điện tử, Xây dựng, Cơ khí chế tạo, quản ngại trị ghê doanh, Makerting, Ngân hàng, ...EBOOKBKMT còn là một nơi thảo luận, chia sẻ kiến thức và tay nghề thực tế nghành nghề dịch vụ Cơ nhiệt năng lượng điện lạnh, Thủy lực khí nén, Điện tự động hóa, technology ô tô với Công nghiệp tiếp tế xi măng...

Bạn đang xem: Hệ thống nhận diện chữ số viết tay (Handwritten digit recognition system)


BÀI GIẢNG

Bài giảng kỹ thuật

Bài giảng tởm tế

Bài giảng thôn hội

LUẬN VĂN

Luận văn kỹ thuật

Luận văn ghê tế

Luận văn làng mạc hội

ĐỀ THI

Đề thi kỹ thuật

Đề thi kinh tế

GÓC KỸ THUẬT NGOẠI NGỮ CỬA SỔ IT

Phần mềm chuyên ngành

Mẹo vặt IT

video MT PURCHASE
*

TÓM TẮT

Vấn đề nhấn dạng chữ viết tay nói bình thường và nhấn dạng chữ số viết tay nói riêng là một thử thách lớn so với các bên nghiên cứu. Vấn đề lớn luôn đưa ra phía trước bởi sự phức hợp của vấn đề nhận dạng văn bản viết nhờ vào nhiều vào phong thái viết và phương pháp thể hiện ngữ điệu của tín đồ viết.

Nhận dạng cam kết tự viết tay là một nghành nghề dịch vụ được quan tâm nghiên cứu và được ứng dụng rộng thoải mái trong nhiều nghành nghề dịch vụ như: dấn dạng các chữ số bên trên phiếu đưa ra ngân hàng, mã số trên bao thơ của dịch vụ thương mại bưu chính, …

Luận văn đã tập trung nghiên cứu và phân tích các vấn đề như sau:

- xử lý và phân tích được được các ký tự hình ảnh đầu vào.

- biến đổi ký tự sang trọng ma trận điểm hình ảnh và ma trận Kernel.

- tiến hành nhận dạng cam kết tự bởi thuật toán mạng neural tích chập.

Từ khóa : dìm dạng, học tập sâu, chữ số viết tay, mạng nơ ron, tích chập.

ABSTRACT The problems of recognizing the handwritten digits and characters cause a big issue khổng lồ challenge the studying và the scientists. The hard situations & huge questions always occur in the processing of the program because it is so complicated to lớn regconize the hand writing. It depends on the styles of the people who is writing và language expression of the writer.

Recognizing the handwritten characters và digits is one of the most important fields which is researched and applied in our lives in so many ways. Such as recognizing the characters or number on the receipt papers of the banks, the sạc numbers on the envelopes of the post offices,...

The thesis focuses on the following issues:

- Handling và analyzes the đầu vào image character.

- Convert characters into px matrix and matrix Kernel.

- Conduct a character recognition algorithm using neural network convolution.

Key words : recognition, deep learning, handwriting, neural network, convolution.

NỘI DUNG:

1. Tính cần yếu của đề bài ........................................................................................12. Mục tiêu nghiên cứu ............................................................................................. 13. Đối tượng với phạm vi nghiên cứu ........................................................................14. Phương thức nghiên cứu vớt ......................................................................................25. Ý nghĩa của đề bài .................................................................................................26. Bố cục tổng quan luận văn .....................................................................................................2CHƢƠNG 1. TỔNG quan lại VỀ XỬ LÝ ẢNH VÀ NHẬN DẠNG CHỮ SỐVIẾT TAY ......................................................................................................................31.1. Tổng quan tiền về dấn dạng chữ số viết tay ..................................................................31.1.1. Trình làng chung.............................................................................................. 31.1.2. Những trở ngại trong câu hỏi nhận dạng văn bản số viết tay ..................................31.1.3. Những công trình phân tích trong và ngoại trừ nước. ............................................41.1.4. Công việc trong quá trình xử lý hình ảnh ................................................................ 51.1.5. Một vài khái niệm trong xử lý ảnh ...................................................................71.2. Các phương pháp xử lý ảnh ......................................................................................81.2.1. Thanh lọc mịn hình ảnh ....................................................................................................81.2.2. Nhị phân hình ảnh ...................................................................................................81.2.3. Chỉnh nghiêng .................................................................................................81.2.4. Chuẩn kích thước ............................................................................................ 91.2.5. Lấp khoảng tầm trống hình ảnh .....................................................................................91.2.6. Phát hiện nay biên và làm cho trơn biên ....................................................................111.2.7. Xác lý thuyết của điểm biên (Freeman code) ...........................................111.2.8. Làm cho trơn đường giáp ranh biên giới ....................................................................................121.3. Các phương thức nhận dạng chữ số viết tay .......................................................... 141.3.1. Phương pháp đối sánh chủng loại ...........................................................................141.3.2. Phương pháp tiếp cận cấu tạo ......................................................................141.3.3. Cách thức học sản phẩm công nghệ với SVM (Support vector machine) .........................15CHƢƠNG 2. MÔ HÌNH MẠNG NEURAL TÍCH CHẬP ......................................162.1. Mạng neural tự tạo ............................................................................................. 162.1.1. Sơ lược về neural sinh học ............................................................................162.1.2. Mạng Neural nhân tạo ...................................................................................172.1.3. Kiến trúc mạng .............................................................................................. 192.1.4. Mạng một tầng .............................................................................................. 192.1.5. Mạng đa tầng.................................................................................................202.1.6. Giảng dạy mạng neural ...............................................................................212.2. Mạng Neural tích chập (Convolutional Neural Networks – CNNs) ......................242.2.1. Convolution (tích chập) ................................................................................242.2.2. định nghĩa CNNs ........................................................................................... 252.2.3. Cấu tạo mạng neural tích chập ....................................................................272.2.4. Những phương thức tích chập (convolution) ...............................................282.2.5. Một trong những phép tích chập thường áp dụng trong xử lý hình ảnh ............................... 32CHƢƠNG 3. NHẬN DẠNG CHỮ SỐ VIẾT TAY VỚI MẠNG NƠ RONTÍCH CHẬP .................................................................................................................353.1. Vấn đề nhận dạng .................................................................................................353.1.1. Vạc biểu việc .......................................................................................... 353.1.2. Ảnh nguồn vào của việc ..............................................................................353.2. Quy mô tổng quan tiền ..................................................................................................363.3. Kiến thiết mạng Neural dấn dạng ký kết tự................................................................ 373.3.1. Thành lập mạng neural ..................................................................................373.3.2. Xử lý tài liệu (phân tích ảnh) ........................................................................373.4. Desgin chương trình thí nghiệm .......................................................................433.4.1. Reviews Python .......................................................................................... 433.4.2. Giới thiệu Tensorflow cùng cách thiết lập .......................................................... 443.4.3. Xây dựng mô hình mạng tích chập ............................................................... 443.4.4. Đầu vào và nhãn............................................................................................ 473.4.5. Lớp Convolution với hàm kích hoạt relu ......................................................483.4.6. Lớp Pooling...................................................................................................483.4.7. Lớp FC ..........................................................................................................493.4.8. Mô hình không thiếu thốn ............................................................................................. 503.4.9. đào tạo và giảng dạy và kiểm chứng quy mô ............................................................. 513.5. Tác dụng thử nghiệm ................................................................................................ 52KẾT LUẬN ..................................................................................................................53TÀI LIỆU THAM KHẢO........................................................................................... 55LINK DOWNLOAD

Trí tuệ tự tạo (Artifical Intelligent) xuất xắc học sản phẩm (Machine Learning) là một lĩnh vực đang được kể đến không ít trong thời gian gần đây bởi tính vận dụng của nó trong thực tiễn. Có rất nhiều ứng dụng của technology học máy sẽ được vận dụng trong cuộc sống thường ngày hàng ngày như: google dịch, xe xe hơi tự lái, hệ thống gợi nhắc mua hàng, hệ thống nhận diện khuôn mặt... Có bao giờ bạn vướng mắc rằng bí quyết mà bọn chúng được xây dựng như thế nào, công nghệ đứng sau nó là gì tốt chưa? nội dung bài viết này vẫn hướng dẫn chúng ta xây dựng một hệ thống sử dụng technology học đồ vật (machine learning) từ bước đầu tiên đến cuối (end-to-end systems) cho hệ thống nhận diện vần âm viết tay. Khoác dù đó là một việc khá solo giản, nhưng mà mình tin rằng nó sẽ là một trong những bài toán phù hợp cho phần lớn người bước đầu tiếp cận với công nghệ Machine Learning. Nào chúng ta hãy cùng bắt đầu!

Bài toán đặt ra

Hệ thống mà họ xây dựng có trách nhiệm nhận diện và rành mạch được 26 vần âm in hoa (uppercase) trong tiếng anh: A, B, C, ..., Z. Ứng dụng của việc này được áp dụng trong bài toán xây dựng vận dụng chấm điểm bài thi trắc nghiệm trên đây: https://fips.edu.vn/p/cham-phieu-dien-trac-nghiem-bang-opencv-va-deep-learning-By
EZk9b25Q0

Xử lý dữ liệu

Bộ dữ liệu hình hình ảnh mà họ sử dụng trong việc này bao hàm hình hình ảnh của 26 chữ cái trong giờ đồng hồ Anh trường đoản cú A mang đến Z. Các chúng ta cũng có thể tải bộ tài liệu (82MB) ở liên kết sau: https://www.kaggle.com/sachinpatel21/az-handwritten-alphabets-in-csv-format. Sau khi tải về cùng giải nén, chúng ta sẽ nhận được tệp dữ liệu định dạng CSV: A_Z Handwritten Data.csv, mình sẽ đổi tên file thành hand_written.csv mang đến dễ nhớ cùng tiện áp dụng (các bạn có thể đổi theo hoặc không).Bây giờ chúng ta bắt đầu xử lý dữ liệu bằng cách xử lý tệp tin CSV này:

# import các thư viện buộc phải thiếtimport numpy as npimport csvimport matplotlibimport matplotlib.pyplot as pltimport matplotlibimport cv2# gọi dữ liệuwith open("hand_written.csv", "r") as csv_file: result = csv.reader(csv_file) rows = <> # phát âm từng cái của file với thêm vào menu rows, mỗi thành phần của list là 1 dòng for row in result: rows.append(row)Chúng ta hãy cùng xem dữ liệu của bọn họ có gì:

print(rows<100000>)# result: <"11", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "95", "155", "150", "67", "11", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "208", "255", "255", "218", "68", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "208", "255", "255", "226", "71", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "121", "231", "255", "226", "71", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "94", "224", "255", "246", "125", "25", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "94", "224", "255", "255", "206", "67", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "94", "224", "255", "255", "244", "89", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "2", "180", "249", "255", "255", "170", "49", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "141", "236", "255", "255", "172", "50", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "70", "212", "255", "255", "239", "98", "3", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "19", "168", "244", "255", "255", "169", "49", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "153", "240", "255", "255", "199", "73", "2", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "153", "240", "255", "255", "255", "132", "16", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "102", "220", "255", "255", "255", "132", "16", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "3", "131", "232", "255", "255", "163", "43", "0", "0", "0", "0", "10", "29", "37", "75", "84", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "42", "190", "255", "255", "249", "167", "49", "21", "62", "103", "168", "230", "233", "246", "208", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "29", "184", "255", "255", "255", "249", "222", "214", "241", "255", "255", "255", "222", "110", "45", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "8", "113", "221", "255", "255", "255", "255", "255", "255", "255", "251", "204", "89", "21", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "4", "108", "219", "255", "255", "255", "255", "246", "186", "93", "48", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "67", "182", "230", "172", "115", "67", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0">print(np.shape(rows<100000>))# result: (785,) mỗi dòng thay mặt đại diện cho một ảnh có kích thước 28*28, ký tự đầu tiên đại diện cho class mà hình ảnh đó ở trong về.Ví dụ:

A là class 0B là class 1...Z là class 26

Do đó độ nhiều năm của danh mục đại diện cho từng dòng là 28*28 + 1 = 785.

Chúng ta hãy thử in ra một vài hình ảnh xem điều nhưng mà mình đã nhắc đến ở trên có đúng hay không:

letter = arr<30000>x = np.array(>)x = x.reshape(28, 28)print(letter)plt.imshow(x)#result: <"2", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "60", "162", "255", "255", "255", "255", "255", "255", "224", "100", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "46", "77", "233", "255", "255", "255", "236", "246", "255", "255", "255", "255", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "255", "255", "255", "255", "255", "167", "65", "116", "255", "255", "255", "255", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "19", "185", "255", "255", "255", "255", "150", "3", "0", "32", "218", "255", "236", "162", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "15", "175", "255", "255", "255", "255", "155", "12", "0", "0", "0", "37", "62", "49", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "83", "185", "255", "255", "255", "227", "116", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "17", "187", "255", "255", "255", "221", "136", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "12", "168", "255", "255", "255", "236", "42", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "102", "255", "255", "255", "229", "49", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "241", "255", "255", "224", "49", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "255", "255", "255", "153", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "255", "255", "255", "153", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "255", "255", "255", "181", "14", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "153", "255", "255", "255", "51", "0", "0", "0", "0", "0", "0", "0", "0", "3", "15", "9", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "102", "255", "255", "255", "121", "0", "0", "0", "0", "0", "0", "0", "46", "144", "255", "199", "23", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "15", "212", "255", "255", "247", "124", "62", "12", "0", "0", "12", "62", "232", "255", "255", "255", "181", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "107", "255", "255", "255", "255", "255", "181", "162", "162", "181", "255", "255", "255", "255", "252", "105", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "29", "212", "255", "255", "255", "255", "255", "255", "255", "255", "255", "255", "255", "190", "88", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "121", "223", "255", "255", "255", "255", "255", "255", "255", "255", "255", "88", "19", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "40", "131", "255", "255", "255", "255", "255", "255", "162", "100", "20", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0">Ký tự trước tiên của các mục là 2, vậy ký kết tự mà lại ta mong đợi thu được là ký tự C. Đúng như vậy, ảnh mà ta nhận được từ đoạn code bên trên là:

*

Để cho đơn giản và hoàn toàn có thể ứng dụng quy mô thu được cho bài toán chấm điểm trắc nghiệm, mình đang chỉ xây dựng mô hình cho tứ ký tự đầu tiên của bảng chữ cái là A, B, C, D. Bí quyết xử lý với toàn thể 26 chữ cái có thể được thực hiện trọn vẹn tương tự.

train_data = <> # dữ liệu trainingtrain_label = <> # label của chúngfor letter in arr: if (letter<0> == "0") or (letter<0> == "1") or (letter<0> == "2") or (letter<0> == "3"): x = np.array(>) x = x.reshape(28, 28) train_data.append(x) train_label.append(int(letter<0>)) else: break
Trong đoạn code trên, tôi đã lấy ra các ký kết tự A, B, C, D gồm trong tập dữ liệu của bản thân và giữ vào train_data cùng train_label. Mỗi thành phần trong train_data là 1 mảng 28 x 28, thay mặt cho một ảnh của một ký tự. Label tương xứng của ký tự kia là một trong những được lưu giữ trong train_labelTổng số hình ảnh của 4 ký tự mà chúng ta thu được là:

print(len(train_label))#result: 56081Để dữ liệu training là trọn vẹn ngẫu nhiên, không áp theo thứ tự xác định, chúng ta sẽ xáo trộn dữ liệu lúc đầu như sau:

import randomshuffle_order = list(range(56081))random.shuffle(shuffle_order)train_data = np.array(train_data)train_label = np.array(train_label)train_data = train_datatrain_label = train_labelĐể áp dụng cho việc Machine Learning, họ chia tập dữ liệu của chính bản thân mình thành cha tập riêng biệt biệt: training set, test set cùng validation set:

print(train_data.shape)train_x = train_data<:50000>train_y = train_label<:50000>val_x = train_data<50000:53000>val_y = train_label<50000:53000>test_x = train_data<53000:>test_y = train_label<53000:>Trong kia x là dữ liệu đầu vào (input), y là label tương xứng (output).

Xem thêm: Hình ảnh chúc mừng sinh nhật bạn trai hay nhất, ghim trên sinh nhật

Xây dựng mô hình

Trong nội dung bài viết này, họ sẽ áp dụng thư viện TFLearn cho bài toán xâu dựng quy mô học máy. Đây là 1 trong thư viện kha khá dễ thực hiện và ko yêu cầu nhiều kỹ năng về Machine Learning. Các bạn đọc hoàn toàn có thể sử dụng một thư viện khác tùy thuộc vào ý muốn.

Import những module cần thiết cho câu hỏi xây dựng mô hình

import tensorflow as tfimport tflearnfrom tflearn.layers.conv import conv_2d, max_pool_2dfrom tflearn.layers.core import input_data, dropout, fully_connectedfrom tflearn.layers import regressionfrom tflearn.data_utils import to_categorical
Khởi tạo các giá trị hằng số được áp dụng trong tế bào hình:BATCH_SIZE = 32IMG_SIZE = 28N_CLASSES = 4LR = 0.001N_EPOCHS = 50Trong đó:

BATCH_SIZE: kích cỡ mỗi batch tài liệu truyền vào
IMG_SIZE: kích thước mỗi chiều của hình hình ảnh đầu vào
N_CLASSES: con số classes mà chúng ta cần giảng dạy (training)LR = 0.001: vận tốc học (learning rate)N_EPOCHS = 50: con số epoch mà chúng ta training
Mô hình mà bọn họ sử dụng sinh sống đây bao hàm 6 lớp Convolutional layer và 2 lớp Fully Connected Layer nối liền nhau. Trên sao chúng ta lại sử dụng quy mô này, và lý do mô hình này lại kết quả cho bài bác toán, bản thân sẽ giải thích trong bài bác tiếp theo. Bây giờ chúng ta hãy quan sát vào mô hình mà họ xây dựng:

tf.reset_default_graph()network = input_data(shape=) #1network = conv_2d(network, 32, 3, activation="relu") #2network = max_pool_2d(network, 2) #3network = conv_2d(network, 64, 3, activation="relu")network = max_pool_2d(network, 2)network = conv_2d(network, 32, 3, activation="relu")network = max_pool_2d(network, 2)network = conv_2d(network, 64, 3, activation="relu")network = max_pool_2d(network, 2)network = conv_2d(network, 32, 3, activation="relu")network = max_pool_2d(network, 2)network = conv_2d(network, 64, 3, activation="relu")network = max_pool_2d(network, 2)network = fully_connected(network, 1024, activation="relu") #4network = dropout(network, 0.8) #5network = fully_connected(network, N_CLASSES, activation="softmax")#6network = regression(network)model = tflearn.DNN(network) #7Trong đó:

#1: form size dữ liệu nguồn vào là None thay mặt cho BATCH_SIZEIMG_SIZE là form size mỗi chiều của ảnh1 là số dải màu sắc của ảnh, do họ sử dụng ảnh đen trắng bắt buộc chỉ có một dải màu, nếu chúng ta sử dụng hình ảnh màu thì số dải màu mà bọn họ sử dụng là 3, đại diện thay mặt cho 3 dải màu RGB.#2: Convolutional layer32: số lượng filters3: filter kích thước 3x3Bước nhảy(stride) được mang định là 1Activation function: Re
LU#3: Maxpool layer2: kernel size#4: Fully-connected layer1024: con số neuron
Activation function: Re
LU#5: Dropout 80%#6: Fully-connected layer đại năng lượng điện cho đầu ra (output)N_CLASSES: số output đầu ra đầu ra
Activation function: softmax (để tổng phần trăm đầu ra bằng 1)#7: gây ra mô hình
Để tài liệu đầu vào được trùng khớp với quy mô đã xây dưng, họ cần phải đưa tài liệu về định dạng cân xứng như sau:

train_x = train_x.reshape(-1, IMG_SIZE, IMG_SIZE, 1)val_x = val_x.reshape(-1, IMG_SIZE, IMG_SIZE, 1)test_x = test_x.reshape(-1, IMG_SIZE, IMG_SIZE, 1)Tương từ với label, gửi label về dạng onehot vector:

original_test_y = test_y # được sử dụng để demo ở bước sautrain_y = to_categorical(train_y, N_CLASSES)val_y = to_categorical(val_y, N_CLASSES)test_y = to_categorical(test_y, N_CLASSES)Bây giờ chúng ta cùng training:

model.fit(train_x, train_y, n_epoch=N_EPOCHS, validation_set=(val_x, val_y), show_metric=True)Sau khi training được 67 steps, kết quả thu được như sau:

Training Step: 52190 | total loss: 0.23665 | time: 12.616s| Adam | epoch: 067 | loss: 0.23665 - acc: 0.9886 -- iter: 49984/50000Training Step: 52191 | total loss: 0.21299 | time: 13.646s| Adam | epoch: 067 | loss: 0.21299 - acc: 0.9897 | val_loss: 0.02314 - val_acc: 0.9970 -- iter: 50000/50000Đối với Validation set, độ đúng chuẩn thu được lên đến 99.70%. Vậy cùng với tập thử nghiệm thì như vậy nào?
Chúng ta hãy lưu giữ lại mã sản phẩm đã train được như sau:

model.save("mymodel.tflearn")Thử nghiệm mô hình:Load lại mô hình đã lưu:

model.load("/content/drive/new_hr/hr.tflearn")Thử nghiệm cùng với tập test:

# dự đoán với tập tài liệu testtest_logits = model.predict(test_x)#lấy phần tử có giá bán trị lớn số 1 test_logits = np.argmax(test_logits, axis=-1)Kết quả thu được là:

print(np.sum(test_logits == original_test_y) / len(test_logits))#result: 0.9964297306069458Kết trái cũng một cách khách quan đấy chứ!

Lời kết

Bài viết sẽ hướng dẫn các bạn xây dựng một quy mô để nhận diện chữ cái viết tay từ cách xử lý tài liệu đến cách xây dựng quy mô và kiểm thử quy mô thu được. Mong muốn qua bài viết này, các chúng ta cũng có thể hiểu được cơ bản cách tạo một mô hình Machine Learning từ trên đầu đến cuối. Nếu gồm gì thắc mắc vui vẻ đặt thắc mắc ở mặt dưới. Cảm ơn chúng ta đã phát âm bài!