Штучна нейронна мережа

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Міністерство освіти і науки України
ПОЯСНЮВАЛЬНА ЗАПИСКА
до курсового проекту
на тему "Штучна нейронна мережа"
по курсу "Об'єктно-орієнтоване програмування"
2005

Зміст
Введення
1 Постановка завдання
2 Опис проектного рішення
2.1 Об'єктно-орієнтований аналіз
2.1.1 Опис предметної області
2.1.2 Інформаційна модель системи
2.1.3 Модель станів
2.1.4 Модель процесів
2.2 Об'єктно-орієнтоване проектування
2.3 Реалізація критеріїв якості
3 Програмна реалізація
4 Керівництво користувача
Висновок
Перелік посилань
Додаток

Введення
Ідея, що світ можна розглядати як у термінах об'єктів, так і подій, була відома ще в давнину. За словами Декарта, люди мають обектно-орієнтований погляд на світ. Об'єктний підхід є одним із сучасних методів реалізації програмних систем. Він дозволяє застосовувати об'єктну орієнтацію для вирішення всього кола проблем, пов'язаних зі складними системами. Об'єктний підхід є концептуальною основою об'єктно-орієнтованого проектування, яке використовує в якості методу об'єктно-орієнтований аналіз, а як інструмент для реалізації об'єктно-орієнтоване програмування.
Найбільш показова ефективність застосування об'єктного підходу для великих програмних систем, зі складним характером взаємодії значної кількості елементів. Дослідженню цих питань і присвячена дана курсова робота. Мета даної курсової роботи - детальне проектування і реалізація системи, яка реалізує процеси створення та взаємодії групи об'єктів. В якості реалізованої системи для реалізації була вибрана штучна нейронна мережа. Вона являє собою об'єкт, який складається з об'єктів - шарів. У свою чергу кожен шар складається з певної кількості елементарних об'єктів - нейронів.
Даний варіант завдання був обраний тому, що інтерес до штучних нейронних мереж швидко зріс за останні кілька років. Штучні нейронні мережі демонструють велику кількість властивостей, притаманних мозку - вони навчаються на основі досвіду, узагальнюють попередні прецеденти на нові випадки і витягують істотні властивості з надходить інформації, яка містить зайві дані.
У даному курсовому проекті для реалізації нейронної мережі був застосований об'єктний підхід. Це дозволило спростити розробку системи, зробити більш зрозумілим програмний код, що може стати в нагоді при розширенні системи та багато іншого.

1 ПОСТАНОВКА ЗАВДАННЯ
Метою розробки даної системи є проблема розпізнавання образів комп'ютером. У цій роботі реалізується розпізнавання комп'ютером друкованих літер за допомогою багатошарової нейронної мережі, яка навчається за методом зворотного розповсюдження помилки. Нейронна мережа складається з декількох шарів нейронів. Формальна модель нейрона представлена ​​на малюнку 1.1.
S
f (A)

x1 w1
A y
x2 w2
xn wn
Малюнок 1.1 - Формальна модель нейрона
Нейрон має n входів . Кожен вхід являє собою числове значення із деякого діапазону. Для кожного входу діапазон може відрізнятися. У нейроні значення входу множиться на коефіцієнт - вага входу-w. , . Результати перемноження складаються: . Від результату обчислюється деяка функція: y = f (A). Існує кілька різновидів функцій: лінійна, нелінійна, стрибкоподібна.
Шар нейронів складається з декількох однотипних нейронів. Однотипні нейрони обчислюють однакові функції.
Нейронна мережа складається з одного або більше шарів. Шар приймає вихід попереднього шару в якості входу. Нейрони різних шарів можуть мати різні функції.
У цій роботі, використовуючи об'єктно-орієнтований підхід, була розроблена штучна полносвязанная багатошарова нейронна мережа. Функцією активації нейронів цієї мережі є сигмоїда, зрушений по осі ординат на -0.5. Як приклад її використання, реалізується розпізнавання малюнків друкованих літер за допомогою цієї мережі. Для того, щоб мережа могла розпізнавати ці літери, її необхідно навчити. У цій роботі реалізується алгоритм навчання нейронної мережі «З учителем» - метод зворотного поширення помилки. Він полягає в наступному: для кожної навчальної пари обчислюється помилка на виході, потім, з огляду на цю помилку, коригують ваги нейронів вихідного шару. Далі обчислюють помилку для нейронів шару, наступного перед вихідним, і коригую ваги його нейронів. І так далі аж до вхідного прошарку.
Для розпізнавання букв іншого шрифту, її необхідно навчити заново. Вона може розпізнавати букви, що надійшли на її вхід з перешкодами.
Програма, розроблена при виконанні даного курсового проекту, запускається в операційній системі Windows 95/98/2000. Для її виконання необхідна динамічна бібліотека mfc42.dll, яка поставляється разом з програмою.

2 ОПИС ПРОЕКТНОГО РІШЕННЯ
2.1 Об'єктно-орієнтований аналіз
Завдання полягає у створенні системи розпізнавання малюнків друкованих літер. Дана система реалізує цю дію, використовуючи для розпізнавання штучну нейронну. Нейронна мережа являє собою один чи кілька послідовно пов'язаних між собою шарів нейронів. Вихід кожного попереднього шару є входом наступного. Вхід першого шару - це вхід мережі, а вихід останнього - це вихід мережі. Нейрон являє собою суматор, вихід якого надходить на вхід функціонального перетворювача. Вихід з функціонального перетворювача - вихід нейрона. Входи суматора - входи нейрона. Кожен вхід множиться на свою вагу. Функція у функціональному перетворювачі називається активаційний. У даній системі як активаційний функції використовується сигмоїда, зрушений по осі ординат на -1 / 2.
У системі використовується багатошарова нейронна мережа. Для коректного розпізнавання букв вона повинна бути навчена. Навчання нейронної мережі полягає в тому, ваги її зв'язків коригуються, при пред'явленні навчальною пари (вхідного вектора і відповідного йому вихідної вектора). У даній системі нейронна мережа навчається за методом зворотного розповсюдження помилки.
На вхід нейронної мережі надходить вектор, який видає елемент, в якому вводиться малюнок літери. Цей вектор складається з чотирьохсот елементів. Порожній клітині відповідає елемент -0.5, а зафарбованої клітці - елемент 0.5. Мережа прораховується, і аналізується вихідний вектор нейронної мережі. Номеру максимального елемента відповідає номер розпізнаної літери. Це дозволяє правильно розпізнати букву, навіть коли вона надходить на вхід з перешкодами.
Система працює під управлінням операційної системи Windows і реалізує графічний діалоговий режим роботи. Введення малюнків літер здійснюється в спеціально розроблений для цього графічний елемент. Висновок розпізнаних літер у текстовому полі.
2.1.1 Опис предметної області
Основа проектування - визначення ключових абстракцій, що характеризують словник предметної області та механізмів управління ними.
Сформуємо список ключових абстракцій:
Літери повинні якось вводитися.
Елемент для введення.
Вихідний вектор.
Літери повинні розпізнаватися штучної нейронної мережею.
Нейронна мережа.
Вхідний шар нейронів.
Приховані шари нейронів.
Вихідний шар нейронів.
Число прихованих прошарків нейронів.
Нейронна мережа складається з шарів нейронів.
Шар нейронів.
Число нейронів у шарі.
Нейрони.
Шар нейронів складається з нейронів.
Нейрон.
Входи нейрона.
Число входів.
Ваги входів.
Вихід.
Таким чином список абстракцій включає чотири класи. З них три: нейронна мережа, шар нейронів і нейрон призначені для побудови нейронної мережі, тобто нейронна мережа складається з шарів нейронів, а шар нейронів складається з нейронів. Четверта абстракція - елемент для введення, призначена для введення малюнків літер.
2.1.2 Інформаційна модель системи
У даній системі крім об'єктів, створених безпосередньо середовищем програмування для реалізації призначеного для користувача інтерфейсу і забезпечення роботи програми в операційній системі, були створені такі об'єкти, виходячи з абстракцій, виділених у пункті 2.1.1.
Об'єкт Елемент для уведення являє собою реальний об'єкт, створений для введення малюнка букв. Графічне представлення цього об'єкта на малюнку 2.1.2.1.
1. Елемент вводу (Е)
- Вихідний вектор
- Х-координата
- У-координата
- Видимість
- Контекст пристрою


SHAPE \ * MERGEFORMAT
Малюнок 2.1.2.1 - Графічне представлення об'єкту Елемент вводу
Усі атрибути даного об'єкту є описовими, за виключення контексту пристрою, який є вказує.
Даний об'єкт має такі атрибути:
- Вихідний вектор - вектор, що містить чисельне значення для кожної клітини елемента вводу. Якщо клітина зафарбований, то елемент вектора дорівнює 1, у противному випадку елемент вектора дорівнює 0.
- Х-координата - х-координата лівого верхнього кута елемента у вікні програми.
- У-координата - у-координата лівого верхнього кута елемента у вікні програми.
- Видимість - визначає, чи виводиться на екран елемент.
- Контекст пристрою - вказує на контекст пристрою, в якому виводиться об'єкт.
Об'єкт Нейрон є реальним об'єктом. Є елементарним об'єктом нейронної мережі.
Графічне представлення цього об'єкта представлено на малюнку 2.1.2.2.
2. Нейрон (Н)
- Вихід
- Входи
- Ваги входів
- Число входів


SHAPE \ * MERGEFORMAT
Малюнок 2.1.2.2 - Графічне представлення об'єкту Нейрон
Об'єкт нейрон має такі описові атрибути:
- Вихід - значення виходу нейрона (аксон).
- Входи - вектор вхідних сигналів нейрона.
- Ваги входів - вектор ваг входів нейрона
- Число входів - число, що визначає кількість входів нейрона.
Об'єкт Шар нейронів включає до свого складу масив нейронів і є складовою частиною нейронної мережі. Його графічне подання на малюнку 2.1.2.3.
3. Шар нейронів (СН)
- Ім'я шару
- Число нейронів


SHAPE \ * MERGEFORMAT
Малюнок 2.1.2.3 - Графічне представлення об'єкту Шар нейронів
Його атрибут - число нейронів визначає кількість нейронів у шарі.
Об'єкт Нейронна мережа створений для розпізнавання малюнків літер. Він являє собою набір шарів нейронів: вхідний шар, приховані шари та вихідний прошарок. Його графічне подання на малюнку 2.1.2.4.
4. Нейронна мережа (НС)
- Ім'я мережі
- Число прихованих шарів


Малюнок 2.1.2.4 - Графічне представлення об'єкту Нейронна мережа
Атрибут цього об'єкта - число прихованих шарів визначає кількість прихованих шарів у нейронної мережі.
Опишемо зв'язку між об'єктами в системі.
Кожен шар нейронів включає в себе декілька нейронів, і кожен нейрон може входити тільки в один шар. В об'єкт Нейрон був довавлен додатковий атрибут Ім'я шару.
Кожна нейронна мережа включає в себе кілька шарів нейронів і кожен шар нейронів входить тільки в одну нейронну мережу. В об'єкт Шар нейронів був доданий додатковий атрибут Назва мережі.
Об'єкт елемент введення не пов'язаний з іншими об'єктами. Нейронна мережа просто використовує його вихідний вектор в якості своїх вхідних сигналів.
Керуючись наведеними вище об'єктами і зв'язками, ми можемо намалювати діаграму інформаційної структури системи.
2.1.3 Модель станів
Зобразимо діаграми життєвих циклів об'єктів.
Діаграма життєвого циклу Елементу введення зображена на малюнку 2.1.3.1.

Порожнє поле
Малюнок літери

введення літери
скидання
Малюнок 2.1.3.1 - Діаграма життєвого циклу Елементу введення
Діаграма життєвого циклу нейрона зображена на малюнку 2.1.3.2.
Нульовий стан
Є значення входів
є значення аксона

подача вхідного
вектора
Малюнок 2.1.3.2 - Діаграма життєвого циклу нейрона

2.1.4 Модель процесів
На малюнку 2.1.4.1 представлена ​​діаграма потоків даних у даній системі.
зміна вихідного
вектора
зміна входів мережі
Навчальна множина
Зміна ваг мережі
зміна виходу мережі

введення малюнка літери
навчання
подача вектора мережі
на вхід мережі

висновок малюнка на екран
прорахунок мережі
Малюнок 2.1.4.1 - Діаграма потоків даних системи
2.2 Об'єктно-орієнтоване проектування
На малюнку 2.2.1 представлені різні типи моделей, які необхідні для об'єктно-орієнтованого проектування. Сукупність цих моделей описує всі необхідні рішення. Моделі є повними, тобто забезпечують розробку проекту на будь-якому об'єктно-орієнтованої мови.
Ці чотири моделі (логічна і фізична структури з динамічними і статичними аспектами) дають можливість дивитися на проект з різних точок зору.
Для опису моделей використовуються 6 видів діаграм. Логічна структура описується діаграмою класів і діаграмою об'єктів. Фізична - діаграмою модулів і діаграмою процесів. Статичний аспект моделі визначає діаграму переходів станів, динамічний аспект - тимчасова діаграма.
У ГО-аналізі системи були виділені 4 абстракції системи, і зв'язки між ними. Ці абстракції представляють із себе Елемент вводу, Нейрон, Шар нейронів і нейронних мережа. Тут ми на підставі цих абстракцій побудуємо класи та об'єкти і їх структури.
Діаграма класів визначає існуючі класи і їх зв'язок в логічному проекті системи. Діаграма класів даної системи представлена ​​на малюнку 2.2.2.
CNNetworkP
CLImage
CLayer
CNeuronP


використовує 1
атрибут m
1
n
Малюнок 2.2.2 - Діаграма класів системи
На цій діаграмі клас CLImage являє собою абстракцію Елемент вводу. Клас CNNetworkP (нейронна мережа) використовує його атрибут Вихідний вектор. Кожен екземпляр класу CNNetworkP використовує m екземплярів класу CLayer (шар нейронів). Кожен екземпляр класу CLayer використовує n екземплярів класу CNeuronP (нейрон).
Діаграма об'єктів показує існуючі об'єкти і їх взаємозв'язку. Вона використовується для того, щоб показати динамічну семантику проекту. Кожен об'єкт діаграми об'єктів являє собою екземпляр деякого класу; операції на діаграмі об'єктів відповідають операціям класу. На малюнку 2.2.3 представлена ​​частина діаграми структури об'єктів системи.
Розпізнавач
F


запит вихідного
вектора
Введення
Овал: Введення


Малюнок 2.2.3 - Частина діаграми структури об'єктів системи
Тут F - це поле Вихідний вектор об'єкта Введення (екземпляр класу CLImage). Об'єкт Розпізнавач (екземпляр класу CNNetworkP) надсилає повідомлення об'єкту Enter на запит вихідного вектора.
Діаграма переходів визначає простір станів примірників конкретного класу, події, що призводять до переходу з одного стану в інший і результат такого переходу. Для нейронної мережі така діаграма показана на малюнку 2.2.4.
SHAPE \ * MERGEFORMAT
Початковий стан
Навчена мережа
мережу з вхідним вектором
мережа з вихідним вектором

Малюнок 2.2.4 - Діаграма переходів для нейронної мережі
Система розбита на модулі наступним чином: оголошення класів для нейрона, шару нейронів і нейронної мережі поміщені в окремий заголовний файл. Їх реалізація знаходиться у файлі типу *. срр. Для всіх інших класів: оголошення кожного класу вміщено в окремий заголовний файл, а реалізація в окремий файл типу *. срр. Якщо в будь-якому класі створюється екземпляр іншого класу, то відповідний заголовний файл поміщається включається у відповідний файл *. срр.
2.3 Реалізація критеріїв якості
Дана програмна система реалізує розпізнавання малюнків друкованих літер використовуючи штучну багатошарову нейронну мережу. Програма побудована за допомогою об'єктно-орієнтованого підходу. Це повністю задовольняє поставленому завданню, де потрібно було реаліовать модель одношарового персептона. З метою більш якісного побудови проекту, була реалізована багатошарова нейронна мережа, здатна навчатися за методом зворотного розповсюдження помилки. Для демонстрації її роботи була обрана одна з областей застосування штучних нейронних мереж - розпізнавання образів (у даній системі - розпізнавання друкованих літер). Нейронна мережа може бути навчена різних шрифтів, а потім завантажувати свої ваги, в залежності від того, букву якого шрифту потрібно розпізнати. Тому система повністю відповідає завданням і вибраним обмеженням.
Програмна модель нейронної мережі була розроблена на основі об'єктно-орієнтованого підходу. Для реалізації нейронної мережі були створені наступні класи: CNNetworkP, ClayerP і CNeuronP, описують абстракції Нейронна мережа, Шар нейронів і Нейрон відповідно. Крім того, для забезпечення розширення системи були створені абстрактні класи CNeuron і CNNetwork, від яких і були успадковані класи нейрона і нейронної мережі відповідно. Ці абстрактні класи представляють собою чисті інтерфейси нейрона і нейронної мережі. Примірник класу нейронної мережі використовує певну кількість примірників класу шару нейронів. Один із цих примірників є вхідний шар мережі, інший - вихідний шар мережі, а решта - приховані шари мережі. Кожен екземпляр класу шару нейронів використовує набір екземплярів класу нейрон. Використання об'єктного підходу в даній системі істотно спростив її розробку і модифікацію. Знизив час, витрачений на її розробку, і зменшив розмір вихідного коду в порівнянні з тим, який був би, якби був застосований структурний підхід. Крім того, такий підхід дозволив приховати деякі поля класів від небажаного доступу, який міг би привести до краху системи або іншим небажаним наслідки. Якщо б ця система була написана з використанням структурного підходу, то вона була б важка для розуміння і модифікації, працювала б повільніше. Взаємодія її модулів важче було б реалізувати.
Програма написана на об'єктно-орієнтованої мови програмування С + +. Він дозволяє писати програмний код використовуючи різні стилі програмування. Всі змінні і константи в даній програмі мають інтуїтивно зрозумілі імена, які описують що це за мінлива або константа. Імена класів були визначені з використанням угорської нотації (ім'я кожної змінної починається з букви, що визначає її тип), що спрощує написання програми. У програмі використовуються відступи від лівого краю, коли одна або кілька конструкцій входять в іншу конструкцію. Це спрощує розуміння структури програми. Кожен член класів забезпечений коментарем, що описує, що являє собою цей член. У середовищі програмування Visual С + + версії 6.0 і вище ці коментарі з'являються в якості tooltip'а при виклику даного члена.
Програма працює в діалоговому режимі з користувачем. Її головне вікно - це діалогове вікно, що містить набір кнопок, поле введення малюнка букви і поля редагування, куди виводиться Незрозумілий буква. Кнопки мають інтуїтивно зрозумілі назви, що говорять про їх призначення і забезпечені пояснюючими значками. Опис дії після натискання кожної кнопки можна прочитати у файлі довідки, який викликається після натиснення кнопки «Довідка». Поле введення малюнка букви представляє собою поле розміром 20х20 клітин. Введення в це поле, аналогічний введення в графічному редакторі при збільшеному масштабі. Клік миші по білій клітці змінює її колір на чорний; клацання по чорній змінює її колір на білий. Така подібність дозволяє швидко освоїтися з введенням малюнків літер. Таким чином дизайн програми повністю задовольняє її функціональному призначенню.
З вищевикладеного видно, що всі критерії якості в програмі враховані.

3 ПРОГРАМНА РЕАЛІЗАЦІЯ
Для написання програми була вибрана мова програмування С + +. Він є повністю об'єктно-орієнтованим, потужним мовою програмування, що підтримує практично всі види абстракцій об'єктно-орієнтованого програмування. Була використана середовище програмування Visual C + + 6.0. Це середовище є візуальним середовищем програмування, що дозволяє перетягувати стандартні компоненти безпосередньо у вікно майбутньої програми. Вона дозволяє автоматизовано створювати різні проекти з використанням «майстрів».
Структурно програма являє собою набір класів, частина з яких була створена розробником, а частина - самим середовищем програмування. Класи створені середовищем програмування успадковані від класів бібліотеки MFC. Примірники одних класів створюються іншими класами, і там відбувається робота з ними. Середовище програмування сама генерує код головної функції і програмісту він не доступний. Програміст може працювати тільки або зі своїми класами, або з класами, що описують інтерфейс програми і її властивості. Також в исходники програми присутні ресурси, які являють собою зовнішні об'єкти, що підключаються до програми під час зв'язування. Цими ресурсами є діалогові вікна, картинки, іконки та спеціальні таблиці, що визначають системні та інтерфейсні властивості програми.
Нижче подано опис класів, створених розробником.
Клас CNeuronP. Цей клас визначає нейрон, який є базовим елементом нейронної мережі. Його оголошення:
class CNeuronP: public CNeuron
{
protected:
float axon; / / вихід
std:: vector <float> inputs; / / входи
std:: vector <float> synapses; / / ваги входів
int rang; / / число входів
public:
CNeuronP (int rng = 2, float por = 2.0);
virtual void AddInput (void); / / додає синапс
virtual float GetAxon (void); / / повертає вихід нейрона
virtual void func (void); / / прорахунок нейрона
int SetInput (float inp, int number); / / встановлює входи
int SetSynaps (float sip, int num); / / встановлює ваги
float GetInput (int number); / / повертає вхід
float GetSynaps (int number); / / повертає вага входу
int GetRang (void); / / повертає число синапсів
float GetPro (void); / / повертає похідну від активаційної функції
};
Як видно з цього оголошення все поля-члени даного класу є закритими, а всі функції-члени - відкритими. Цей принцип реалізований і в інших класах, створених розробником. Це зроблено для забезпечення гнучкості роботи з екземплярами класів, без доступу до їх внутрішньої структурі. Дії, виконувані функціями-членами та призначення полів-членів описані в коментарях до них.
Опишемо функцію func. Вона виконує прорахунок нейрона. Вона бере кожен вхід нейрона і множить його на відповідну вагу. Потім цей твір додається до суми таких самих творів, і так для кожного входу. Потім від отриманої суми обчислюється функція, в даному випадку сигмоїда, зрушений на -1 / 2 по осі ординат. Результат обчислення цієї функції присвоюється виходу нейрона.
Клас CLayerP. Він являє собою набір нейронів, які входять в один шар нейронної мережі. Його оголошення:
class CLayerP
{
protected:
std:: vector <CNeuronP> neurons; / / нейрони шару
int number; / / число нейронів у шарі
public:
CLayerP (int num = 2);
virtual void AddNeuron (CNeuronP neur); / / додає нейрон в шар
virtual int SetNeuron (CNeuronP neur, int num);
int GetNumber (void); / / повертає число нейронів у шарі
CNeuronP & GetNeuron (int num); / / повертає нейрон за його номером
};
Деякі функції-члени класу зроблені віртуальними для забезпечення поліморфізму у разі розширення системи.
Клас CNNetworkP. Цей клас описує багатошарову нейронну мережу, яка застосовується в програмі для розпізнавання букв. Його оголошення:
class CNNetworkP: public CNNetwork
{
protected:
CLayerP FirstLayer; / / перший шар
CLayerP LastLayer; / / останній шар
std:: vector <CLayerP> layers; / / приховані шари
int m_number; / / число прихованих шарів
public:
CNNetworkP (int num1 = 2 / * число нейронів у вхідному шарі * /,
int num2 = 2 / * число нейронів у вихідному шарі * /,
int num3 = 2, / * число нейронів в прихованому шарі * /
int number = 1 / * число прихованих шарів * /);
virtual void Solve (void); / / прорахунок мережі
void SetInputs (std:: vector <float> inp); / / встановлює входи
void SetNumFSynaps (int num); / / встановлює число синапсів в кожному нейроні першого шару
int NumHLayers (void); / / число прихованих шарів
virtual float GetOut (int number); / / повертає вихід
virtual void Learn (int number, CString filename, int num); / / навчає мережа конкретній парі
void before (void); / / початкова ініціалізація ваг
void SaveToFile (CString filename); / / запис навчених ваг в файл
void LoadFromFile (CString filename); / / завантаження навчених ваг з файлу
void SaveOuts (CString filename); / / зберегти виходи в файл
};
Конструктор даного класу створює екземпляри всіх нейронів, які входять у цю мережу, використовуючи їхні конструктори з параметрами за замовчуванням.
Функція-член Solve здійснює прорахунок мережі. При цьому спочатку прораховуються всі нейрони вхідного шару, потім їх виходи використовуються в якості входів нейронів першого прихованого шару, для їх прорахунку і так далі аж до вихідного шару мережі. Вихід вихідного шару використовується в якості виходу мережі.
Функція-член before здійснює початкову ініціалізацію ваг, що проводиться перед навчанням мережі. Вона за допомогою генератора довільних чисел привласнює всім вагами мережі значення в межах від -0.5 до 0.5.
Функція-член Learn здійснює навчання нейронної мережі, навчальним парам, які беруться з заданого файлу. У ній реалізований алгоритм навчання зі зворотним поширенням помилки. Число ітерацій цього алгоритму може визначатися або припустимою величиною похибки, яка задана у вигляді константи, або з допомогою параметра, що визначає число ітерацій і переданого функції як параметр. На кожній ітерації на вхід мережі подається стандартний вхідний вектор з навчальною пари, і мережа прораховується. Потім її вихід порівнюється з еталонним виходом цьому навчальною пари і обчислюється помилка для кожного елемента цього вектора. Ваги вихідного шару модифікуються відповідно до цієї помилку. Потім обчислюється помилка для кожного виходу останнього прихованого шару нейронної мережі. І його ваги змінюються точно так само, як ваги вихідного шару. І так далі аж до вхідного прошарку. Потім цей процес повторюється.
Програма була навчена буквах із спеціально підготовленого для програми шрифту і показала високу ступінь розпізнавання, навіть при наявності великих перешкод. Програма буде розпізнавати малюнок літери до тих пір, поки він не стане схожий на малюнок іншої літери, якому навчена нейронна мережа.

4 КЕРІВНИЦТВО КОРИСТУВАЧА
Програма разом із вихідними поставляється на дискеті. Для установки програми необхідно переписати її виконуваний файл nNetwork.exe в окрему папку. Туди ж необхідно переписати файли nNetwork.cnt і nNetwork.hlp, які забезпечують програмі роботу з довідкою. Також на дискеті перебуває RAR-архів mfc42.rar. Файл знаходиться в ньому необхідно розпакувати в папку windows \ system32, для забезпечення роботи з програмою.
Для запуску програми необхідно клацнути по її іконці. Відкриється головне діалогове вікно програми, що містить набір кнопок для управління програмою, поле введення букв розміром 20х20 клітин і поле редагування, куди буде виводитися Незрозумілий буква. Разом з програмою поставляється файл a.txt, що містить двійкове подання малюнків літер. Цей файл зроблений як приклад шрифту для розпізнавання програмою. Ваги нейронної мережі, навченої на розпізнавання букв з цього файлу, знаходяться у файлі final.txt. Для завантаження цих ваг необхідно клацнути по кнопці «завантаження» в головному вікні програми і в діалоговому вікні ввести шлях до цього файлу і клацнути по кнопці ОК. Робота з програмою докладно описана в довідковій системі, яка викликається клацанням по кнопці «Допомога». Там же наведено короткий опис нейронної мережі, яка у цій програмі.

ВИСНОВОК
В результаті виконання даного курсового проекту була розроблена програма, що містить модель штучної нейронної мережі, призначену для розпізнавання друкованих літер, яким вона навчена. При написанні програми використовувався об'єктний підхід, що дозволило знизити час розробки системи, спростити розуміння програми, значно зменшити розмір початкового коду програми.
Програму можна легко розширити, вставивши додаткові класи інших моделей нейронних мереж для більш якісного і швидкого розпізнавання букв або для виконання інших дій. Також якщо цю програму протягом близько 1000 циклів навчати почерку якого або людини, то вона навчитися розпізнавати його почерк, тобто вона зможе розпізнавати рукописні букви, без будь яких змін в структурі нейронної мережі або в процесі навчання.

ПЕРЕЛІК ПОСИЛАНЬ
Г. Буч «Об'єктно-орієнтований аналіз та проектування з прикладами додатків на С + +» / / Буч Г. - СПб: «Невський Діалект», 1998 р . - 632с.
Б. Страуструп «Мова програмування С + +, 3-е видання» / / Страуструп Б. - М.: «Невський Діалект» - «Видавництво БІНОМ», 1999 р. - 991 с.
Г. Кейт «Використання Visual C + + 6. Спеціальне видання. »/ / Кейт Г. - К.: Видавничий дім« Вільямс », 1999 р. - 864 с.
Дороніна Ю. В. «Конспект лекцій з ООП»
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
61.9кб. | скачати


Схожі роботи:
Нейронна мережа Хеммінга
Мережа доступу ICATVEthernet Мережа інтерактивного кабельного телебачення плюс мережа Ethernet
Однорангова локальна мережа і мережа з виділеним сервером Експертна система
Мережа доступу ICATV Ethernet Мережа інтерактивного кабельного телебаченн
Нейронна теорія
Нейронна теорія
Штучна вентиляція легенів 2
Штучна вентиляція легенів
Штучна підтримка організму
© Усі права захищені
написати до нас