Các tập huấn luyện

Một phần của tài liệu Nhận dạng chữ viết tay tiếng Việt sử dụng mạng nơron (Trang 68 - 86)

Để huấn luyện mạng phải cung cấp các tập huấn luyện. Dữ liệu huấn luyện này đƣợc lƣu trong các lớp TrainingSet.

Trong các lớp Trainingset lƣu các biến sau:

inputCount: Số các yếu tố đầu vào cho mỗi mẫu đào tạo.

outputCount: Số các yếu tố đầu ra cho mỗi mẫu đào tạo.

input[] []: Mẫu đầu vào huấn luyện.

output[][]: Mẫu đầu ra huấn luyện.

trainingSetCount: Số lƣợng mẫu huấn luyện 3.2.5 Lớp mạng cơ bản

Các thuộc tính đƣợc sử dụng cho các mục đích sau:

NEURON_ON: Giá trị mà một nơron phải lớn hơn hoặc bằng để đƣợc coi

NEURON_OFF: Giá trị mà một nơron phải nhỏ hơn hoặc bằng để đƣợc

coi là "off".

output[]: Đầu ra của mạng nơron.

totalError: Lỗi từ lƣợt cuối cùng. Đây là tổng 1ỗi của tất cả tập huấn

luyện.

inputNeuronCount: số nơron đầu vào.

outputNeuronCount: số nơron đầu ra.

random: Bộ tạo số ngẫu nhiên, đƣợc sử dụng để khởi tạo trọng số có giá

trị ngẫu nhiên.

Lớp mạng bao gồm phƣơng thức tính chiều dài véctơ cho một véctơ. Phƣơng pháp này tính tổng bình phƣơng các số có trong véctơ. Một chức năng quan trọng khác của các lớp cơ sở là tính tích vô hƣớng. Lớp mạng Kohonen đƣợc cung cấp nhƣ mạng con.

Trọng số đƣợc khởi tạo ban đầu với các giá trị ngẫu nhiên. Các giá trị ngẫu nhiên này đƣợc huấn luyện để tạo ra kết quả tốt hơn. Lúc bắt đầu của mỗi chu kỳ huấn luyện các trọng số cũng đƣợc khởi tạo ngẫu nhiên. Lớp mạng tạo ra một phƣơng thức để làm điều này.

3.2.6 Lớp mạng nơron Kohonen

Các thuộc tính đƣợc sử dụng bởi mạng Kohonen đƣợc tóm tắt nhƣ sau:

Halt: thiết lập bằng true để kết thúc huấn luyện.

learnMethod: phƣơng thức học, thiết lập bằng 1 cho trừ, hoặc giá trị khác

learnRate: tốc độ học ban đầu.

outputWeights[][]: trọng số nơron đầu ra và đầu vào.

quitError: Khi đạt đến tỷ lệ 1ỗi này thì ngừng huấn luyện.

reduction: Lƣợng giảm learnRate ở mỗi chu kỳ

retries: Tổng số chu kỳ cho phép, số chu kỳ huấn luyện cao nhất có thể

diễn ra.

train: Tập huấn luyện

Đầu tiên, cần lƣu ý rằng có một phƣơng thức dùng để sao chép ma trận trọng số. Sao chép ma trận trọng số là điều quan trọng bởi vì khi huấn luyện mạng Kohonen, ma trận trọng số mới tìm đƣợc thỏa mãn là ma trận trọng số tốt nhất, nó phải đƣợc sao chép để lƣu lại ma trận trọng số tốt nhất này. Cũng có một phƣơng thức có khả năng xóa trống hoàn toàn ma trận trọng số. Nó thực hiện bằng cách thiết lập tất cả các trọng số của ma trận bằng 0. Cuối cùng có một phƣơng thức khởi tạo sẽ thiết lập tất cả ma trận trọng số giá trị khởi tạo ngẫu nhiên.

Một số phƣơng thức khác nhau đƣợc sử dụng để chuẩn hóa, bởi vì chuẩn hóa là một phần quan trọng của mạng Kohonen. Chuẩn hóa để cho mạng Kohonen hoạt động tốt: Chuẩn hóa đầu vào, chuẩn hóa trọng số.

Khi huấn luyện, chúng ta không quan tâm đến đầu ra của mỗi nơron mà chỉ quan tâm đến đầu ra của nơron thực sự chiến thắng. Phƣơng thức "winer" tìm nơron chiến thắng hoạt động bằng cách lập trên từng nơron và tính toán đầu ra của từng nơron riêng biệt. Trong vòng lặp này sẽ lƣu lại chỉ số của nơron có đầu

ra cao nhất. Nơron với đầu ra cao nhất đƣợc coi là nơron chiến thắng. Phƣơng thức trả lại nơron chiến thắng.

3.2.6.1 Tính toán đầu ra của mạng Kohonen

Quá trình nhận dạng bắt đầu khi mà ngƣời sử dụng vẽ ký tự và nhấn vào nút nhận dạng. Đầu tiên ký tự đƣợc lấy mẫu xuống thành hình ảnh kích thƣớc 10*10. Hình ảnh đƣợc lấy mẫu xuống phải đƣợc sao từ mảng hai chiều đến véctơ đầu vào mà sẽ dùng để đƣa vào mạng. Mạng nơron yêu cầu làm nổi điểm đầu vào. Vì vậy gán giá trị 0.5 và -0.5 cho các điểm ảnh.

Một mảng 100 giá trị đƣợc đƣa vào đầu vào. Điều này đƣợc thực hiện bằng cách gửi các mảng đầu vào đến phƣơng thức "winner" của mạng Kohonen. Nó sẽ trả lại nơron chiến thắng của 100 đầu vào đƣợc lƣu trong số nguyên "best".

Nơron chiến thắng không phải là quá hữu ích, bởi vì nó không cho bạn thấy những ký tự đã thực sự đƣợc nhận dạng. Để sắp xếp các nơron với các ký tự nhận dạng đƣợc, mỗi hình ảnh ký tự mà mạng đã đƣợc đào tạo phải đƣợc đƣa vào mạng và nơron chiến thắng đƣợc xác định. Ví dụ, muốn đƣa hình ảnh huấn luyện cho ký tự Ô vào trong mạng, và nơron chiến thắng là nơron #4, thì phải biết rằng nơron #4 là nơron đƣợc học để nhận dạng ra mẫu của ký tự Ô. Điều này đƣợc thực hiện bằng cách gọi phƣơng thức "mapNeurons". Phƣơng thức "mapNeurons" trả lại một mảng ký tự. Chỉ số của mỗi phần tử mảng tƣơng ứng với nơron nhận dạng ký tự đó.

Phần lớn công việc thực tế đƣợc thực hiện bằng mạng nơron đƣợc thực hiện bằng phƣơng thức ”winner”. Đầu tiên phƣơng thức này thực hiện chuẩn hóa đầu vào, tính giá trị đầu ra cho mỗi nơron. Nơron nào có giá trị lớn nhất thì đƣợc

chọn là nơron chiến thắng. Đầu tiên biến "biggest" đƣợc thiết lập giá trị nhỏ để chỉ rằng chƣa có nơron chiến thắng.

Trọng số của mỗi nơron đầu ra đƣợc tính bằng cách lấy tích vô hƣớng của trọng số mỗi nơron đầu ra đến nơron đầu vào. Tích vô hƣớng đƣợc tính bằng cách nhân mỗi giá trị đầu vào với trọng số giữa nơron đầu vào và đầu ra. Những trọng số này đƣợc quyết định trong quá trình huấn luyện. Đầu ra đƣợc giữ và nếu cho đến giờ nó là giá trị lớn nhất thì nó đƣợc thiết lập là nơron chiến thắng.

Ta thấy tính kết quả từ mạng nơron là một quá trình rất nhanh. Trên thực tế, xác định trọng số của nơron là phần phức tạp nhất của quá trình này.

3.2.6.2 Huấn luyện mạng nơron Kohonen

Học là quá trình lựa chọn một ma trận trọng số nơron sẽ nhận ra đúng mẫu đầu vào. Một mạng Kohonen học bằng cách liên tục đánh giá và tối ƣu hóa một ma trận trọng số. Để làm đƣợc điều này, một ma trận trọng số khởi tạo phải đƣợc quyết định. Nó đƣợc chọn bằng các giá trị ngẫu nhiên.

Khi ma trận trọng số đƣợc khởi tạo ngẫu nhiên thì quá trình huấn luyện có thể bắt đầu. Đầu tiên, đánh giá ma trận trọng số để xác định mức lỗi hiện hành. Lỗi này đƣợc xác định bởi quá trình ánh xạ đầu vào huấn luyện đến đầu ra tốt nhƣ thế nào. Lỗi đƣợc tính toán bằng phƣơng thức "evaluateErrors" của lớp KohonenNetwork. Nếu mức lỗi nhỏ, nhỏ hơn 10%, thì quá trình đƣợc hoàn thành.

Quá trình huấn luyện bắt đầu khi ngƣời sử dụng nhấn vào nút: "Học". Quá trình này tính số nơron đầu vào và đầu ra. Đầu tiên số nơron đầu vào đƣợc quyết

định từ kích thƣớc của hình ảnh lấy mẫu xuống là 100. Còn số đầu ra tƣơng ứng với số ký tự mẫu.

Bây giờ kích thƣớc của mạng nơron đƣợc xác định, tập huấn luyện và mạng nơron phải đƣợc cấu trúc. Tập huấn luyện đƣợc cấu trúc để giữ số lƣợng chính xác số mẫu. Với chƣơng trình này là 89 ký tự đƣợc cung cấp.

Tiếp theo, hình ảnh đầu vào đƣợc lấy mẫu xuống và đƣợc sao chép đến tập huấn luyện. Đây là vòng lặp cho tất cả mẫu đầu vào.

Cuối cùng mạng đƣợc cấu trúc và tập huấn luyện đƣợc đƣa vào. Với tập huấn luyện đƣợc giao, phƣơng thức "learn" có thể đƣợc gọi. Nó sẽ điều chỉnh ma trận trọng số cho đến khi mạng đƣợc huấn luyện.

Phƣơng thức học sẽ lặp với số vòng lặp không xác định. Nhƣng chắc chắn ràng nó sẽ mất nhiều hơn một lần lặp. Khi số mẫu huấn luyện phù hợp với nơron đầu ra, huấn luyện xảy ra rất nhanh.

Một thủ tục có tên là "evaluateErrors" đƣợc gọi để đánh giá các trọng số đang làm việc tốt nhƣ thế nào. Điều này đƣợc xác định bằng cách nhìn vào dữ liệu huấn luyện đến nơron đầu ra tốt nhƣ thế nào. Nếu có nhiều nơron đầu ra đƣợc kích hoạt cho cùng một mẫu huấn luyện thì tập trọng số là không tốt. Một tỷ lệ lỗi đƣợc tính toán dựa trên tập huấn luyện truyền đến nơron đầu ra tốt nhƣ thế nào.

Một khi lỗi đƣợc xác định, chúng ta phải xem nó có dƣới mức lỗi tốt nhất từ trƣớc đến giờ không. Nếu nó thỏa mãn thì lỗi này đƣợc đƣa vào mức lỗi tốt nhất và các trọng số nơron đƣợc duy trì bằng cách sao chép để lƣu lại.

Tổng số nơron chiến thắng sau đó đƣợc tính toán. Điều này cho phép ta xác định trƣờng hợp không có nơron đầu ra nào đƣợc kích hoạt. Ngoài ra, nếu tỷ lệ lỗi dƣới mức chấp nhận đƣợc (10%) thì quá trình huấn luyện dừng. Nếu không có nơron nào chiến thắng thì một nơron buộc phải trở thành nơron chiến thắng.

Bây giờ ma trận trọng số đầu tiên đƣợc đánh giá, nó đƣợc điều chỉnh dựa trên lỗi của nó. Các giá trị điều chỉnh đƣợc tính toán khi lỗi đƣợc xác định. Quá trình hiệu chỉnh ma trận trọng số gồm hai bƣớc là tính toán lỗi và điều chỉnh ma trận trọng số cho đến khi lỗi dƣới 10%.

Trên đây là phƣơng pháp huấn luyện mạng nơron. Phƣơng pháp điều chỉnh và tính toán lỗi đƣợc chỉ ra trong tập tin "KohonenNetwork.java"

3.3 Chƣơng trình mô phỏng

3.3.1 Các chức năng của chƣơng trình

Hình 3.1 Giao diện chƣơng trình mô phỏng

 Vẽ chữ: vùng để vẽ ký tự lên.

 Tập mẫu: Chứa các ký tự mẫu dùng để huấn luyện.

 Mẫu: Tải tập ký tự mẫu đã tạo sẵn trong file: sample.dat.

 Ghi: Ghi lại tập ký tự mẫu vào file: sample.dat.

 Học: Huấn luyện mạng.

 Xóa mẫu: Xóa một ký tự mẫu đƣợc chọn.

 Nhận dạng: Nhận dạng ký tự đã vẽ vào.

 Xóa chữ: Xóa ký tự đƣợc vẽ trong vùng vẽ chữ.

 Ma trận: Hiển thị ảnh của ký tự lên lƣới.

Chúng ta có thể tải tập huấn luyện ra từ file tạo sẵn sample.dat bằng cách nhấn nút "Mẫu" hoặc chúng ta có thể tự nhập mẫu để huấn luyện bằng cách vẽ ký tự vào vùng vẽ ký tự rồi nhấn "Thêm ký tự", khi đó có một hộp thoại xuất hiện, nhắc bạn đánh vào ký tự tƣơng ứng để khi nhận dạng nó sẽ chỉ ra ký tự tƣơng ứng với ký tự vừa vẽ.

Sau khi nhập xong tập mẫu thì nhấn nút "Học" để huấn luyện cho mạng nơron Kohonen. Quá trình huấn luyện hoàn thành, có thể thực hiện nhận dạng ký tự bằng cách vẽ ký tự rồi nhấn nút "Nhận dạng". Khi đó ký tự đƣợc hiển thị trên lƣới kích thƣớc 10*10.

Có thể xóa ký tự bằng cách nhấn nút "Xóa ký tự", hoặc xóa mẫu trong tập mẫu bằng cách chọn ký tự cần xóa rồi nhấn nút "Xóa". Có thể ghi lại tập mẫu bằng cách nhấn nút "Ghi", khi đó tập mẫu đƣợc tạo ra sẽ đƣợc lƣu vào file sample.dat.

3.3.2 Kết quả nhận dạng

- Để nhận dạng ký tự, ta vẽ ký tự cần nhận dạng vào vùng vẽ chữ. - Nhấn nút nhận dạng.

- Ký tự đƣợc hiển thị trên lƣới kích thƣớc 10* 10.

Một số kết quả minh họa

Hình 3.2 Nhận dạng ký tự Ơ

Hình 3.4 Nhận dạng ký tự Ƣ 3.3.3 Kết luận

Chƣơng trình có thể nhận dạng với độ chính xác cao. Nếu ký tự nhận dạng chƣa đƣợc chính xác, ta có thể thêm mẫu và huấn luyện lại cho ký tự đó đến khi nhận dạng đƣợc ký tự đó chính xác. Nếu các ký tự gần giống nhau, khi nhận dạng dễ lẫn sang nhau thì khi huấn luyện ta thêm mẫu tƣơng ứng với các ký tự đến khi nào đạt đƣợc tỷ lệ nhận dạng cao.

Chƣơng trình nhận dạng chính xác hơn, với các ký tự không dấu độ chính xác hơn 90%, đối với ký tự có dấu thì độ chính xác khoảng hơn 80%. Đối với ký tự có dấu độ chính xác thấp hơn so với trƣờng hợp không có dấu vì trong trƣờng

hợp này, các ký tự khác nhau rất ít, nên số lƣợng mẫu huấn luyện cho các ký tự có dấu cần nhiều hơn.

Để nhận dạng đƣợc nhiều kiểu viết khác nhau thì tập mẫu huấn luyện cho mỗi ký tự phải có nhiều dạng phong phú, tƣơng ứng với các cách viết mà ngƣời sử dụng có thể viết ra. Quá trình huấn luyện này giải quyết đƣợc khía cạnh phức tạp của bài toán nhận dạng chữ viết tay, đó là sự đa dạng của chữ viết tay, đặc biệt là chữ viết tay tiếng Việt.

Nhƣ vậy chƣơng trình mô phỏng nhận dạng ký tự viết tay tiếng Việt trực tuyến đã đạt đƣợc mục tiêu của bài toán phức tạp đã đặt ra. Hiện nay, nghiên cứu về mạng nơron là một hƣớng nghiên cứu còn rất mới mẻ và nhiều hứa hẹn. Áp dụng hƣớng tiếp cận mới này để giải quyết bài toán nhận dạng ký tự viết tay tiếng Việt trực tuyến vốn rất phức tạp ở những đặc điểm:

- Ký tự viết tay trực tuyến phải thêm vào và xử lý phần tạo giao diện để vẽ ký tự, so với việc nhập đầu vào là file ảnh của ký tự viết tay.

- Ký tự viết tay thì hình dạng của ký tự rất phong phú đa dạng, phụ thuộc nhiều vào ngƣời viết, bởi mỗi ngƣời có cách viết khác nhau.

- Ký tự viết tay tiếng Việt có số lƣợng lớn, lớn hơn rất nhiều so với các ký tự theo các chuẩn khác. Ví dụ: chuẩn tiếng Anh chỉ gồm 26 ký tự không dấu, trong khi chuẩn tiếng Việt có 89 ký tự gồm ký tự không dấu và có dấu. Mặt khác, các ký tự lại rất giống nhau nên dễ nhầm lẫn trong quá trình nhận dạng.

Nhƣ vậy, khi giải quyết bài toán này phải đáp ứng đƣợc các yêu cầu: - Giải quyết đƣợc sự phức tạp của việc xử lý dữ liệu đầu vào.

- Giải quyết đƣợc việc xử lý khối lƣợng dữ liệu lớn.

- Giải quyết đƣợc độ chuẩn xác trong quá trình nhận dạng.

- Giải quyết đƣợc mức độ tổng quát, đa dạng, phong phú trong quá trình xây dựng và huấn luyện mạng để đạt đƣợc độ chính xác cao khi nhận dạng.

CHƢƠNG IV KẾT LUẬN

Mặc dù những nghiên cứu phôi thai đầu tiên của lý thuyết mạng nơron đã bắt đầu từ những năm 40 của thế kỷ XX, nhƣng chỉ trong một vài thập niên trở lại đây nó mới thực sự có đƣợc những ứng dụng quan trọng và mang đến nhiều hứa hẹn về một thế hệ các máy thông minh mới. Chính vì vậy, đối với riêng cá nhân tôi, nó còn hơn cả một điều mới mẻ - là một bộ môn lý thuyết của tƣơng lai. Điều này đã thúc đẩy tôi vừa thực hiện nghiên cứu lý thuyết vừa cố gắng cài đặt một phần mềm thử nghiệm với hy vọng nắm đƣợc những gì đƣợc gọi là căn bản nhất trong khoảng thời gian thực hiện bản luận văn này. Theo sự gợi ý của thầy giáo hƣớng dẫn, tôi đã lựa chọn đề tài: "Nhận dạng chữ viết tay Tiếng Việt sử dụng mạng nơron ".

Sau thời gian nghiên cứu, những kết quả chính mà tôi đã đạt đƣợc và chƣa đạt đƣợc (kết quả hƣớng tới) có thể tổng kết lại nhƣ sau:

4.1 Các kết quả đã đạt đƣợc 4.1.1 Về mặt lý thuyết 4.1.1 Về mặt lý thuyết

 Nắm đƣợc khái niệm về những thành phần cơ bản và các kiểu kiến trúc cơ bản của mạng nơron, phân biệt đƣợc một số loại mạng nơron.

 Nắm đƣợc ý nghĩa của việc học hay tích lũy, trong đó có vai trò to lớn của các quy tắc học, mô hình học và thuật toán học đối với nhiều khả năng ứng dụng khác nhau.

 Tìm hiểu các ứng dụng của mạng nơron trong thực tế.

 Nắm đƣợc những kiến thức cơ bản về mô hình mạng nơron Kohonen và cách xây dựng một mô hình mạng nơron trong thực tế.

Một phần của tài liệu Nhận dạng chữ viết tay tiếng Việt sử dụng mạng nơron (Trang 68 - 86)