Побудова та дослідження моделі штучної нейронної мережі для вирішення задач класифікації об'єктів у багатопоточних комп'ютерних середовищах

Навчання штучних нейронних мереж, особливості їх використання для вирішення практичних завдань. Рецепторна структура сприйняття інформації. Перцептрон як модель розпізнавання. Задача моделювання штучної нейронної мережі з розпаралелюванням процесів.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 24.07.2013
Размер файла 2,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Навчання елементарного перцептрона полягає у зміні вагових коефіцієнтів wi зв'язків A-R. Ваги зв'язків S-A (які можуть приймати значення (-1; 0;

1)) і значення порогів A-елементів вибираються випадковим чином на самому початку і потім не змінюються [12].

Після навчання перцептрон готовий працювати в режимі розпізнавання або узагальнення. У цьому режимі перцептрону пред'являються раніше невідомі йому об'єкти, і він повинен встановити, до якого класу вони належать. Робота перцептрона полягає в наступному: при пред'явленні об'єкта, збуджені A-елементи передають сигнал R-елементу, що дорівнює сумі відповідних коефіцієнтів wi. Якщо ця сума позитивна, то приймається рішення, що даний об'єкт належить до першого класу, а якщо вона негативна - то до другого.

2.4.2 Багатошаровий перцептрон

На рис.2.3 наведено приклад багатошарового перцептрона.

Рисунок 2.3 - Багатошаровий перцептрон

Мережа складається з довільної кількості шарів нейронів. Нейрони кожного шару з'єднуються з нейронами попереднього і наступного шарів за принципом "кожен з кожним". Перший шар (ліворуч) називається сенсорним або вхідним, внутрішні шари називаються прихованими або асоціативними, останній (самий правий, на малюнку складається з одного нейрона) - вихідним або результативним. Кількість нейронів у шарах може бути довільною. Зазвичай у всіх прихованих шарах однакова кількість нейронів.

Позначимо кількість шарів і нейронів у шарі. Вхідний шар: NI нейронів; NH нейронів у кожному прихованому шарі; NO вихідних нейронів; х - вектор вхідних сигналів мережі, у - вектор вихідних сигналів.

Існує плутанина з підрахунком кількості шарів у мережі. Вхідний шар не виконує ніяких обчислень, а лише розподіляє вхідні сигнали, тому іноді його рахують, іноді - ні. Позначимо через NL повну кількість шарів у мережі, рахуючи вхідний.

Робота багатошарового перцептрона (БШП) описується формулами:

(2.18)

(2.19)

(2.20)

де індексом i завжди будемо позначати номер входу, j - номер нейрона в шарі, l - номер шару.

Xijl - й вхідний сигнал j-го нейрона у шарі l;

Wijl - ваговий коефіцієнт i-го входу нейрона номер j у шарі l;

NETjl - сигнал NET j-го нейрона в шарі l;

OUTjl - вихідний сигнал нейрона;

иjl - пороговий рівень нейрона j у шарі l;

Введемо позначення: Wjl - вектор-стовпець ваг для всіх входів нейрона j у шарі l; Wl - матриця ваг всіх нейронів у шарі l. У стовпцях матриці розташовані вектора Wjl. Аналогічно Xjl - вхідний вектор-стовпець шару l.

Кожен шар розраховує нелінійне перетворення від лінійної комбінації сигналів попереднього шару. Звідси видно, що лінійна функція активації може застосовується тільки для тих моделей мереж, де не потрібно послідовне з'єднання шарів нейронів один за одним. Для багатошарових мереж функція активації повинна бути нелінійною, інакше можна побудувати еквівалентну одношарову мережу, і багатошаровість виявляється непотрібною. Якщо застосована лінійна функція активації, то кожен шар даватиме на виході лінійну комбінацію входів. Наступний шар дасть лінійну комбінацію виходів попереднього, а це еквівалентно одній лінійній комбінації з іншими коефіцієнтами, і може бути реалізовано у вигляді одного шару нейронів.

Багатошарова мережа може формувати на виході довільну багатовимірну функцію при відповідному виборі кількості шарів, діапазону зміни сигналів і параметрів нейронів. Як і ряди, багатошарові мережі виявляються універсальним інструментом апроксимації функцій. Видно відмінність роботи нейронної мережі від розкладання функції в ряд:

Ряд:

(2.21)

Нейронна мережа:

За рахунок почергового розрахунку лінійних комбінацій і нелінійних перетворень досягається апроксимація довільної багатовимірної функції при відповідному виборі параметрів мережі.

2.4.3 Алгоритм вирішення задач за допомогою БШП

Щоб побудувати БШП, необхідно вибрати його параметри. Найчастіше вибір значень ваг і порогів вимагає навчання, тобто покрокових змін вагових коефіцієнтів і порогових рівнів.

Загальний алгоритм рішення:

1. Визначити, який зміст вкладається в компоненти вхідного вектора x. Вхідний вектор повинен містити формалізовану умову задачі, тобто всю інформацію, необхідну для отримання відповіді.

2. Вибрати вихідний вектор y таким чином, щоб його компоненти містили повну відповідь щодо поставленого завдання.

3. Вибрати вид нелінійності в нейронах (функцію активації). При цьому бажано врахувати специфіку завдання, тому що вдалий вибір скоротить час навчання.

4. Вибрати число шарів і нейронів у шарі.

5. Поставити діапазон зміни входів, виходів, ваг і порогових рівнів, враховуючи безліч значень вибраної функції активації.

6. Присвоїти початкові значення ваговим коефіцієнтам і граничним рівням і додатковим параметрам (наприклад, крутизні функції активації, якщо вона буде налаштовуватися при навчанні). Початкові значення не повинні бути великими, щоб нейрони не опинилися в насиченні (на горизонтальній ділянці функції активації), інакше навчання буде дуже повільним. Початкові значення не повинні бути і занадто малими, щоб виходи більшої частини нейронів не були рівні нулю, інакше навчання також сповільниться.

7. Провести навчання, тобто підібрати параметри мережі так, щоб задача вирішувалася найкращим чином. Після закінчення навчання мережа готова вирішити завдання того типу, яким вона навчена.

8. Подати на вхід мережі умови задачі у вигляді вектора x. Розрахувати вихідний вектор y, який і дасть формалізоване рішення задачі.

2.4.4 Формалізація задачі розпізнавання букв алфавіту

Як було показано вище букви можна подати у вигляді точкових зображень.

Рисунок 2.4 - Точкове зображення

Темна клітинка зображення відповідає Iij = 1, світла - Iij =0. Задача полягає в тому, щоб визначити по зображенню букву.

Побудуємо БШП з Ni * Nj входами, кожному входу відповідає один піксель: хk =Iij, k = 1. Ni* Nj. Яскравості пікселів будуть компонентами вхідного вектору. В якості вихідних сигналів виберемо ймовірності того, що пред'явлене зображення повідає даній букві: y = (c1. cM) T. Мережа розраховує вихід:

(2.22)

де вихід с1 = 0,9 означає, наприклад, що пред'явлено зображення літери "А", і мережа впевнена в цьому на 90%, вихід с2 = 0,1 - що зображення відповідало букві "Б" з імовірністю 10% і т.д.

Висновки до розділу

Даний розділ було присвячено варіантам застосування нейронних мереж для вирішення різноманітних задач. Для подальших досліджень обрано задачу класифікації символів латинського алфавіту. Було запропоновано різноманітні алгоритми навчання нейронної мережі. Як основу для досліджень обрано модель контрольованого навчання мережі, адже вона дозволяє контролювати бажаний вихід мережі. Для задачі класифікації символів було запропоновано алгоритм її вирішення за допомогою багатошарового перцептрона.

3. Моделі та засоби організації багатопоточних обчислень

З розвитком комп'ютерних технологій з'явилися нові можливості для прискорення вирішення задач шляхом розбиття основної задачі на більш дрібні та виконання останніх паралельно та одночасно.

Сучасні комп'ютери обладнуються багатоядерними процесорами, не кажучи вже про кластерні технології. Саме тому виникає потреба в організації багатопоточних обчислень.

3.1 Багатопочність як явище

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

Якщо в системі доступно кілька процесорів (ядер), то ОС ділить процеси на доступні ядра й тоді кілька процесів можуть працювати дійсно одночасно. Більше того, можна розпаралелити обчислення одного додатка на кілька фізичних процесорів і тим самим збільшити швидкість виконання складних обчислень.

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

Такі потоки називають також потоками виконання (від англ. Thread of execution); іноді називають "нитками" (буквальний переклад англ. Thread) або неформально "тред".

Суттю багатопоточності є квазібагатозадачність на рівні одного виконуваного процесу, тобто всі потоки виконуються в адресному просторі процесу. Крім цього, всі потоки процесу мають не тільки загальний адресний простір, а й загальні дескриптори файлів. Процес, що виконується має як мінімум один (головний) потік [2].

Типи реалізації потоків:

· потік в просторі користувача (кожен процес має таблицю потоків, аналогічну таблиці процесів ядра);

· потік в просторі ядра (разом з таблицею процесів в просторі ядра є таблиця потоків)

· "волокна" (англ. fibers, кілька потоків режиму користувача, що виконуються в одному потоці режиму ядра. Потік простору ядра споживає помітні ресурси, в першу чергу фізичну пам'ять і діапазон адрес режиму ядра для стека режиму ядра. Тому було введено поняття "волокна" - полегшеного потоку, що виконується виключно в режимі користувача. У кожного потоку може бути кілька "волокон").

Переваги першого типу наступні:

· можливість реалізації на ядрі, що не підтримує багатопоточність;

· швидше переключення, створення і завершення потоків;

· процес може мати власний алгоритм планування.

Недоліки:

· відсутність переривання по таймеру усередині одного процесу;

· при використанні блокуючого системного запиту решта всіх потоків блокується;

· відсутній виграш у швидкодії на багатопроцесорних системах;

· складність реалізації.

Переваги другого типу:

· ядро може одночасно планувати виконання декількох потоків одного процесу на декількох процесорах, блокування виконується на рівні потоку;

· процедури ядра можуть бути багатопоточними.

Недоліки:

· перемикання потоків в межах одного процесу вимагає участі ядра.

Переваги в багатопоточності такі:

· спрощення програми в деяких випадках, за рахунок використання загального адресного простору;

· менші відносно процесу часові витрати на створення потоку і взаємодію між потоками;

· підвищення продуктивності процесу за рахунок розпаралелювання процесорних обчислень і операцій вводу/виводу;

Основною проблемою при роботі багатопоточних додатків є ресурси комп'ютера - пристрої, потоки вводу/виводу, файли, дані. Складність полягає в тому, що якщо кілька потоків використовують один ресурс, то можуть виникнути колізії. Уявимо ситуацію: один потік відкриває файл для запису даних, і в цей же час другий потік видаляє цей файл. У результаті перший потік одержує невалідний покажчик на неіснуючий файл. Інший приклад, коли два потоки намагаються одночасно одержати доступ у якусь область даних. Припустимо, існує загальна змінна, в яку два потоки пишуть дані, така програма буде нестабільною і працювати буде неправильно. Для забезпечення унікальності й атомарності доступу до конкурентних ресурсів операційна система дає кілька інструментів [2]:

· взаємовиключення (м'ютекси);

· семафори;

· критичні секції;

· події.

Семафор - це універсальний механізм для організації взаємодії процесів. Розв'язує задачі взаємного виключення та синхронізації потоків. Він є одним з найстаріших засобів розподілення доступу процесів, що працюють паралельно, до критичних ресурсів. Семафори використовуються для контролю доступу до спільного ресурсу, або для синхронізації процесів.

М'ютекс (англ. mutex, від англ. mutual exclusion - взаємне виключення) - одномісний семафор, що служить в програмуванні для синхронізації процесів і потоків, що виконуються одночасно. М'ютекси (mutex) це один з варіантів семафорних механізмів для організації взаємного виключення. Вони реалізовані в багатьох ОС, їхнє основне призначення - організація взаємного виключення для потоків з одного і того ж або з різних процесів.

Мета використання м'ютексів - захист цілісності даних; проте ним породжуються інші проблеми, такі як взаємне блокування (клінч) і "змагання за ресурс".

Критична секція (англ. critical section) - об'єкт синхронізації потоків, що дозволяє запобігти одночасному виконанню деякого критичного набору операцій (зазвичай пов'язаних з доступом до даних) кількома потоками. Критична секція виконує ті ж завдання, що і м'ютекс. Між м'ютексом і критичною секцією є термінологічні відмінності, так процедура аналогічна захопленню м'ютекса називається входом в критичну секцію (enter), зняття блокування мьютекса - виходом з критичної секції (leave).

Подія - це об'єкт, який зберігає в собі 1 біт інформації "просигналізував чи ні", над яким визначено операції "просигналізувати", "скинути в непросигналізований стан" і "чекати". Очікування на просигналізованій події є відсутність операції з негайним продовженням виконання потоку. Очікування на непросигналізованій події призводить до припинення виконання потоку до тих пір, поки інший потік (або ж друга фаза обробника переривання в ядрі ОС) не просигналізує подію. Можливо очікування кількох подій в режимах "любого" чи "всіх". Можливо також створення події, що автоматично скидається в непросигналізований стан після пробудження першого ж - і єдиного - потоку, що очікує (такий об'єкт використовується як основа для реалізації об'єкта "критична секція"). Активно використовуються в MS Windows, як в режимі користувача, так і в режимі ядра. Аналогічний об'єкт є і в ядрі Linux під назвою kwait_queue.

3.2 Моделі організації багатопоточності

Існують різні моделі багатопоточності - способи відображення потоків користувача в потоки ядра. Теоретично можливі (і на практиці реалізовані) наступні моделі багатопоточності:

· модель багато / один (many-to-one) - відображення декількох потоків користувача в один і той же потік ядра. Використовується в операційних системах, що не підтримують множинні системні потоки (наприклад, з метою економії пам'яті).

· модель один / один (one-to-one) - взаємно-однозначне відображення кожного потоку користувача в певний потік ядра. Приклади ОС, що використовують дану модель, - Windows 95/98/NT/2000/XP/2003/2008/7; OS / 2.

· модель багато / багато (many-to-many) - модель, яка припускає відображення декількох потоків користувача в кілька системних потоків. Така модель дозволяє ОС створювати велику кількість системних потоків. Характерним прикладом ОС, що використовує подібну модель, є ОС Solaris, а також Windows NT / 2000/XP / 2003/2008/7 з пакетом ThreadFiber. Дана модель зображена на рис.3.3.

3.3 Проблеми багапоточності

Багатопоточність - дуже складна, ще не повністю вивчена і, тим більше, не повністю формалізована область, в якій є багато цікавих проблем. Розглянемо деякі з них [2].

Припинення потоків. Важливою проблемою є проблема припинення потоків: наприклад, якщо батьківський потік припиняється, то чи повинен при цьому припинятися дочірній потік? Якщо припиняється стандартний процес, який створив декілька потоків, то чи повинні припинятися всі його потоки? Відповіді на ці питання в різних ОС неоднозначні.

Обробка сигналів. Сигнали в UNIX - низькорівневий механізм обробки помилкових ситуацій. Приклади сигналів: SIGSEGV - порушення сегментації (звернення за невірною адресою, найчастіше за нульовою); SIGKILL - сигнал процесу про виконання команди kill його знищення. Користувач може визначити свою процедуру-обробник сигналу системним викликом signal. Проблема в наступному: як поширюються сигнали в багатопоточних програмах і яким потоком вони повинні оброблятися? У більшості випадків це питання вирішується таким чином: сигнал обробляється потоком, в якому він згенерований, і впливає на виконання тільки цього потоку. У більш сучасних ОС (наприклад, Windows 2000 і пізніших версіях Windows), заснованих на об'єктно-орієнтованої методології, концепція сигналу замінена більш високорівневої концепцією виключення (exception). Виняток поширюється по стеку потоку в порядку, зворотному порядку викликів методів, і обраховується першим з них, в якому система знаходить відповідний обробник. Аналогічна схема обробки виключень реалізована в Java і в.net.

Групи потоків. У складних завданнях, наприклад, завданнях моделювання, при великому числі різнорідних потоків, виникає потреба в їх структуруванні за допомогою концепції групи потоків - сукупності потоків, що має своє власне ім'я, над потоками якої визначені групові операції. Найбільш вдало групи потоків реалізовані в Java (за допомогою класу ThreadGroup). Слід відзначити також ефективну реалізацію пулів потоків (ThreadPool) в.net.

Локальні дані потоку (thread-local storage - TLS) - дані, що належать тільки певному потоку і використовуються тільки цим потоком. Необхідність у таких даних очевидна, так як багатопоточність - важливий метод розпаралелювання рішення великого завдання, при якому кожен потік працює над вирішенням дорученої йому частини. Всі сучасні операційні системи та платформи розробки програм підтримують концепцію локальних даних потоку.

Синхронізація потоків. Оскільки потоки, як і процеси можуть використовувати загальні ресурси і реагувати на загальні події, то необхідні засоби їх синхронізації.

Тупики (deadlocks) та їх запобігання. Потоки можуть взаємно блокувати один одного (тобто може створитися ситуація deadlock), при їх недолугому програмуванні.

3.4 Паралельні обчислення

Паралельні обчислення - такий спосіб організації комп'ютерних обчислень, при якому програми розробляються як набір взаємодіючих обчислювальних процесів, що працюють паралельно (одночасно) [2]. Термін охоплює сукупність питань паралелізму в програмуванні, а також створення ефективно діючих апаратних реалізацій.

Існують різні способи реалізації паралельних обчислень. Наприклад, кожен обчислювальний процес може бути реалізований у вигляді процесу операційної системи, або ж обчислювальні процеси можуть являти собою набір потоків виконання всередині одного процесу ОС. Паралельні програми можуть фізично виконуватися або послідовно на єдиному процесорі - перемежовуючи по черзі кроки виконання кожного обчислювального процесу, або паралельно - виділяючи кожному обчислювальному процесу один або декілька процесорів (що знаходяться поряд або розподілених в комп'ютерну мережу).

Основна складність при проектуванні паралельних програм - забезпечити правильну послідовність взаємодій між різними обчислювальними процесами, а також координацію ресурсів, що розділяються між процесами.

Види паралельної взаємодії:

У деяких паралельних системах програмування передача даних між компонентами прихована від програміста, тоді як в інших вона повинна вказуватися явно. Явні взаємодії можуть бути розділені на два типи:

· взаємодія через розділювану пам'ять (наприклад, в Java або C #). Даний вид паралельного програмування зазвичай вимагає якоїсь форми захоплення управління (мьютекс, семафори, монітори) для координації потоків між собою.

· взаємодія за допомогою передачі повідомлень (наприклад, в Erlang або occam). Обмін повідомленнями може відбуватися асинхронно, або з використанням методу "рандеву", при якому відправник блокований до тих пір, поки його повідомлення не буде доставлене. Асинхронна передача повідомлень може бути надійною (з гарантією доставки) або ненадійною.

Паралельні системи, засновані на обміні повідомленнями, найчастіше більш прості для розуміння, ніж системи з пам'яттю, і зазвичай розглядаються як більш досконалий метод паралельного програмування. Обмін повідомленнями може бути ефективно реалізований на симетричних мультипроцесорах як з роздільною когерентною пам'яттю, так і без неї.

3.5 Програмні інструменти паралелізму

ь POSIX Threads або Pthread - стандарт POSIX реалізації потоків виконання, який визначає API для створення та управління ними [17]. Бібліотеки, які реалізують цей стандарт та його функції, звичайно називаються Pthreads (функції мають приставку "pthread_"). Найбільш широко використовуються для Unix-подібних операційних систем, таких як Linux чи Solaris, також існує реалізація для Microsoft Windows (Pthreads-w32)

OpenMP (Open Multi-Processing) - це набір директив компілятора, бібліотечних процедур та змінних середовища, які призначені для програмування багатопоточних додатків на багатопроцесорних системах із загальною пам'яттю на мовах C, C++ та Fortran.

Розробку специфікації OpenMP ведуть кілька великих виробників обчислювальної техніки та програмного забезпечення, робота яких регулюється некомерційною організацією, названою OpenMP Architecture Review Board (ARB).

ь OpenMP можна розглядати як високорівневу надбудову над Pthreads (або аналогічними бібліотеками потоків) [17]. POSIX-інтерфейс для організації потоків Pthreads підтримується широко (практично на всіх UNIX-системах), проте з багатьох причин не підходить для практичного паралельного програмування:

· немає підтримки Fortran;

· дуже низький рівень;

· немає підтримки паралелізму за даними;

· механізм нитей спочатку розроблявся не для цілей організації паралелізму.

OpenMP реалізує паралельні обчислення за допомогою багатопоточності, в якій "головний" (master) потік створює набір підлеглих (slave) потоків і завдання розподіляється між ними. Передбачається, що потоки виконуються паралельно на машині з декількома процесорами (кількість процесорів не обов'язково має бути більше або дорівнювати кількості потоків).

Завдання, що виконуються потоками паралельно, так само як і дані, необхідні для виконання цих завдань, описуються за допомогою спеціальних директив препроцесора відповідної мови - прагм.

Кількість створюваних потоків може регулюватися як самою програмою за допомогою виклику бібліотечних процедур, так і ззовні, за допомогою змінних оточення.

ь Windows API (application programming interfaces) - загальне найменування для цілого набору базових функцій інтерфейсів програмування додатків операційних систем сімейства Windows корпорації Майкрософт. Є найпрямішим способом взаємодії додатків з Windows. Для створення програм, що використовують Windows API, Майкрософт випускає SDK, який називається Platform SDK і містить документацію, набір бібліотек, утиліт і інших інструментальних засобів.

Центральним механізмом паралелізму в інтерфейсі Windows API є потік. Як правило, для створення потоків використовується функція CreateThread. Хоча потоки відносно легко створювати і використовувати, операційна система виділяє на управління ними значну кількість часу і інших ресурсів. Більше того, незважаючи на те що всіх потоків одного рівня пріоритету гарантується рівний час виконання, відповідне навантаження на систему вимагає створення досить великих завдань. При роботі з більш дрібними або специфічними завданнями навантаження на систему при роботі в режимі паралелізму може зводити до нуля переваги від паралельного виконання завдань.

Пули потоків є одним із способів зниження витрат на управління потоками. Користувальницькі пули потоків і реалізація пулу потоків, що надаються інтерфейсом Windows API, дозволяють ефективно виконувати невеликі робочі елементи в паралельному режимі. Пул потоків Windows поміщає робочі елементи в чергу, що обслуговується за принципом "першим надійшов - першим обслужили" (FIFO). Кожен робочий елемент запускається в тому порядку, в якому він був доданий в пул.

Виконавча з паралелізмом реалізує алгоритм перенесення навантаження для розширення механізму планування FIFO. Цей алгоритм переміщує завдання, які ще не були розпочаті, в потоки, в яких закінчуються робочі елементи. Алгоритм перенесення навантаження дозволяє не тільки рівномірно розподіляти робоче навантаження, а й змінювати порядок робочих елементів. Через зміни порядку послідовність запуску робочих елементів може відрізнятися від послідовності передачі елементів в пул. Це властивість корисно використовувати з рекурсивними алгоритмами, так як в цьому випадку вище ймовірність спільного використання даних більш новими завданнями, ніж надійшли раніше. Пріоритетне виконання нових елементів дозволяє знизити число пропусків влучень в кеш і, ймовірно, число помилок сторінки.

З точки зору операційної системи перенесення навантаження не є "справедливим" методом роботи. Однак якщо додаток реалізує алгоритм або завдання для паралельного виконання, адекватність розподілу ресурсів між підзадачами часто не має значення. У цьому випадку важливіше те, наскільки швидко завершується спільне завдання. Для інших алгоритмів FIFO є адекватною стратегією планування.

ь Message Passing Interface (MPI) це специфікація API що дозволяє комп'ютерам обмінюватись повідомленнями [17]. Використовується в комп'ютерниx кластерах, та суперкомп'ютерах. MPI було створене Вільямом Гроппом, Едвіном Луском та іншими.

Програма MPI - це набір незалежних процесів, які взаємодіють між собою за допомогою відправки та отримання повідомлень. Сильна сторона MPI полягає в тому, що цей інтерфейс пред'являє дуже низькі вимоги до апаратної частини паралельного комп'ютера. Все, що потрібно цьому інтерфейсу, - щоб процесори або ядра спільно використовували одну мережу, придатну для передачі повідомлень між будь-якими двома процесами. Це дозволяє MPI працювати на будь-якої стандартній паралельній системі, від симетричних багатопроцесорних систем до систем з розподіленою пам'яттю, від суперкомп'ютерів з високим ступенем паралелізму до кластерів.

Ключове поняття MPI - комунікатор. При створенні набору процесів вони утворюють групу, яка може спільно використовувати середовище для зв'язку.

Група процесів у поєднанні з середовищем зв'язку утворює унікальний комунікатор. Переваги такої концепції стають очевидними, якщо розглянути використання бібліотек в програмі. Якщо програміст буде неуважний, повідомлення, створені розробником бібліотеки, можуть конфліктувати з повідомленнями, які використовуються в програмі, що викликає цю бібліотеку. Але при наявності комунікаторів розробник бібліотеки може створити власне середовище зв'язку і при цьому гарантувати, що поки мова йде про повідомлення, які передаються в системі, все, що відбувається в бібліотеці, не вийде за її межі.

Висновки до розділу

Даний розділ присвячений багатопоточним системам. Були розглянуті різноманітні механізми взаємодії процесів, основні моделі організації багатопоточності. Також введено поняття паралельності, та проаналізовані програмні інструменти паралелелізму.

Подальші дослідження ґрунтувалися на основі API інтерфейсів організації багатопоточності, адже для реалізації обрано мову програмування C#, яка має стандартні засоби організації багатопоточних обчислень.

4. Задача моделювання штучної нейронної мережі з розпаралелюванням процесів

У цьому розділі буде приведено опис реалізованої системи розпізнавання символів, побудованої на базі нейронної мережі з розпаралелюванням процесів.

4.1 Постановка задачі

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

У попередніх розділах детально описувалися існуючі архітектури нейронних мереж, їх застосування та методи навчання. Згрупувавши всю доступну інформацію, автор пропонує реалізувати модель нейронної мережі на основі трьохшарового перцептрона. Вибір зумовлений тим, що дана модель, за своїми показниками, якнайкраще підходить для вирішення задач класифікації, оскільки трьохшарова архітектура є оптимальною (при меншій кількості шарів недостатня точність розпізнавання, в результаті накладання схожих областей; більша ж кількість шарів використовується для вирішення складніших завдань).

Для навчання мережі було обрано контрольований метод. Адже він дозволяє контролювати бажаний вихід мережі та порівнювати його з входом. Крім того неконтрольовані алгоритмі являються достатньо складними для реалізації. Для побудови моделі буде використано метод зворотного поширення помилки, який являється одним із різновидів контрольованих методів навчання.

Для програмної реалізації продукту, було обрано мову програмування C#, як середовище розробки Visual Studio 10. Вибір обґрунтований функціональними можливостями платформи, що дозволить реалізувати поставлені цілі, а також зручністю використання модулів програми, простотою інтерфейсу та доступністю великої кількості інформації для підтримки розробників.

Для досягнення головної мети даного проекту, а саме організації багатопоточності, було обрано стандартну бібліотеку для підтримки паралельних обчислень в С#, TPL (The Task Parallel Library), що є одним з функцій інтерфейсів Windows API. Основним критерієм вибору є зручність використання та відносна простота в програмній реалізації.

4.2 Теоретичне обґрунтування обраних моделей

4.2.1 Метод зворотного поширення помилки

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

Згідно методу найменших квадратів, цільовою функцією помилки НМ, що мінімізується, є величина:

(4.1)

де - реальний вихідний стан нейрона j вихідного шару N нейронної мережі при подачі на її входи p-го образу; - ідеальний бажаний стан цього нейрона.

Підсумовування ведеться по всім нейронам вихідного шару і по всім оброблюваних мережею образам. Мінімізація ведеться методом градієнтного спуску, що означає підстроювання вагових коефіцієнтів наступним чином:

(4.2)

Тут wij - ваговий коефіцієнт синаптичного зв'язку, що з'єднує i-ий нейрон шару n-1 з j-им нейроном шару n, з - коефіцієнт швидкості навчання, 0 < з <1.

(4.3)

Тут під yj, мається на увазі вихід нейрона j, а під sj - зважена сума його вхідних сигналів, тобто аргумент активаційної функції. Так як множник dyj/dsj є похідною цієї функції за її аргументом, з цього випливає, що похідна активаційної функції повинна бути визначена на всій осі абсцис. У зв'язку з цим функція одиничного стрибка та інші активаційні функції з неоднорідностями не підходять для розглянутих НМ. У них застосовуються такі гладкі функції, як гіперболічний тангенс або класичний сигмоїд з експонентою.

У випадку гіперболічного тангенса

(4.4)

Третій множник sj/wij, очевидно, дорівнює виходу нейрона попереднього шару yi (n-1).

(4.5)

Тут підсумовування по k виконується серед нейронів шару n +1.

Ввівши нову змінну

(4.6)

ми отримаємо рекурсивну формулу для розрахунків величин j (n) шару n з величин k (n+1) більш старшого шару n +1.

(4.7)

Для вихідного слоя

(4.8)

Одже тепер стало можливо записати рівняння 4.2 в розкритому вигляді:

(2.9)

Іноді для додання процесу корекції ваг деякої інерційності, що згладжує різкі скачки при переміщенні по поверхні цільової функції, (4.9) доповнюється значенням зміни ваги на попередній ітерації

(4.10)

де

м - коефіцієнт інерційності, t - номер поточної ітерації.

Таким чином, повний алгоритм навчання НМ за допомогою процедури зворотного поширення будується так [25]:

1. Подати на входи мережі один з можливих образів і в режимі звичайного функціонування НМ, коли сигнали поширюються від входів до виходів, розрахувати значення останніх.

(4.11)

де M - число нейронів у шарі n-1 з урахуванням нейрона з постійним вихідним станом +1, що задає зсув; yi (n-1) =xij (n) - i-ий вхід нейрона j шару n.

(4.12)

де f () - сигмоїд

(4.13)

де Iq - q-та компонента вектору вхідного образу

2. Розрахувати (N) для вихідного шару по формулі (4.8).

Розрахувати по формулі (4.9) та (4.10) зміну ваги w (N) шару N.

3. Розрахувати по формулам (4.7) та (4.9) відповідно (N) та w (N) для всіх інших шарів, n = N-1,…1.

4. Скорегувати усі ваги в НМ

(4.14)

5. Якщо помилка мережі вагома, перейти на крок 1. Інакше - кінець.

4.2.2 Підходи до організації багапоточності

Існує наступна досить загальна класифікація варіантів паралельної декомпозиції нейромережевих обчислень:

· паралелізм рівня сесії навчання;

· паралелізм рівня навчального прикладу;

· паралелізм рівня шарів;

· паралелізм рівня вузлів (нейронів);

· паралелізм рівня ваг (зв'язків);

· паралелізм рівня окремих бітів.

Паралелізм рівня сесії навчання передбачає одночасне навчання однієї і тієї ж мережі на однакових навчальних прикладах, проте з різними параметрами навчання.

Паралелізм рівня навчального приклад називають також навчанням групами (batch learning): безліч навчальних прикладів розбивається на певну кількість навчальних підмножин, кожне з яких використовується для навчання свого примірника нейронної мережі даного типу. У процесі навчання накопичуються зміни ваг вихідної мережі для кожної навчальної підмножини. В кінці навчання накопичені зміни ваг об'єднуються і обчислюються нові значення ваг.

Паралелізм рівня шарів корисний коли мережа має достатню кількість шарів N > 1. Обчислення ведуться поточно: кожен шар обробляє в даний момент часу свій окремий приклад і, таким чином, збільшується швидкість проходження даних одного прикладу через всю мережу, оскільки мережею обробляється кілька прикладів одночасно.

Паралелізм рівня обробних вузлів (нейронів) означає, що кожен вузол є окремою обчислювальною одиницею, що працює незалежно від інших вузлів. Паралельно в цьому випадку виконується, наприклад, підсумовування зважених входів кожного нейрона, а також інша необхідна обробка.

Паралелізм рівня ваг (зв'язків) має на увазі ще більш глибоке розпаралелювання забезпечуючи одночасні обчислення "провідності" кожного зваженого зв'язку окремо.

Паралелізм рівня вузлів і паралелізм рівня ваг можуть бути застосовні до всіх конекціоністских моделей нейронних мереж.

Паралелізм рівня окремих бітів є найтоншим видом паралелізму і означає паралельну обробку на рівні окремих бітів.

Найбільш загальними й універсальними у застосуванні є способи розпаралелювання нейромережевих обчислень з 4 по 5. Проте, представляється очевидним, що в рамках кластерної архітектури дані підходи навряд чи можуть виявитися виправдані в зв'язку з занадто малими гранулами паралелізму (під гранулою паралелізму розуміється середня кількість операцій на кожен введений в гранулу або виведений з гранули байт) відповідних моделей обчислень.

Найбільш перспективними для реалізації на кластерному обчислювальному пристрої, очевидно, є варіанти 1 і 2, а також в деякій мірі (залежить від розв'язуваної задачі) варіант 3.

Слід зазначити, що при кластерній організації обчислень, що припускає досить істотний обсяг сумарної оперативної пам'яті, розподіленої по окремим вузлам, з'являється сприятлива можливість для паралельної обробки досить великих масивів даних, що може бути корисним при роботі з графічними зображеннями.

Метод 3 при сприятливих умовах (хороша реалізація, велика кількість шарів, і т.д.) може бути застосований для прискореної обробки потоку зображень (наприклад, відео-зйомки).

Відомо, що найбільш інтенсивне обчислювальне навантаження припадає на фазу навчання нейронних мереж (наприклад мереж прямого поширення за алгоритмом зворотного поширення помилки). Зменшення часу навчання нейронної мережі є актуальним завданням, особливо, на стадії експериментального дослідження придатності тих чи інших нейромережевих моделей, вибору оптимальних параметрів для їх успішного застосування на практиці.

Саме тому в даному проекті буде реалізовано розпаралелювання процесу навчання нейронної мережі, а саме обчислень на рівні нейронів в процесі роботи алгоритму зворотного поширення помилки.

4.2.3 The Task Parallel Library (TPL)

Для програмної реалізації поставленої мети було обрано стандартну бібліотеку організації паралельних обчислень програмного середовища С#.

The Task Parallel Library (TPL) являє собою набір відкритих типів і інтерфейсів API в System. Threading і System. Threading. Tasks простору імен в.net Framework версії 4 [18]. Мета TPL - зробити розробку більш продуктивною за рахунок спрощення процесу додавання паралелізму і паралелізму в додатках. TPL зважує ступінь паралелізму динамічно, щоб найбільш ефективно використовувати всі процесори, які доступні. Крім того, TPL проводить розбиття роботи, планування потоків на ThreadPool, підтримку скасування, управління та інших низькорівневих деталей. За допомогою TPL, ви можете максимізувати продуктивність вашого коду, зосереджуючись на задачах, які були поставлені щодо розробки вашої програми.

Починаючи з платформи.net Framework 4, TPL є кращим способом написання багатопоточного і паралельного коду. Однак не весь код підходить для розпаралелювання, наприклад, якщо цикл виконує лише невеликий обсяг робіт на кожній ітерації, або він не призначений для виконання багатьох ітерацій, то накладні витрати на розпаралелювання можуть викликати більш повільну роботу програми. Крім того, розпаралелювання, як і будь-яка багатопоточність ускладнює виконання програми.

4.3 Опис системи, що розробляється

4.3.1 Проектування функціональної структури

При розробці програмного продукту важливим є процес порівневого спуску від найбільш загальної та абстрактної моделі системи до логічної, а потім й до фізичної моделі. Для досягнення даної структури спочатку побуємо діаграму віріантів використання, яка описує функціональне призначення системи, або, іншими словами, що буде робити система в процесі свого функціонування.

На основі технічного завдання була побудована діаграма використання, що представлена на рис.4.1 З її допомогою було описано бачення системи з точки зору користувача, описані функціональні можливості системи.

Рисунок 4.1 - Загальна діаграма використання

Основні функції системи, що розробляється:

· розпізнавання букв латинського алфавіту;

· встановлення параметрів для створення нейронної мережі;

· можливість навчання нейронної мережі з використанням нових прикладів;

· можливість збереження та використання навченої конфігурації.

Взаємодія між користувачем та системою представляє собою діалог, де користувач обирає параметри системи та задає початкові дані. Процес навчання проходить без участі першого. Надалі користувачеві надається можливість працювати з навченою мережею. Він може подавати для обробки різні варіанти символів латинського алфавіту, які система буде розпізнавати та виводити результат.

Далі проведемо опис ієрархічних структур системи.

4.3.2 Опис та ієрархія основних класів системи

Діаграма класів (class diagram) слугує для представлення статичної структури моделі системи в термінології класів об'єктно-орієнтованого програмування. Діаграма класів може відображати, зокрема, різні взаємозв'язки між окремими сутностями предметної області, такими як об'єкти і підсистеми, а також описує їх внутрішню структуру і типи відносин.

Загальна діаграма ієрархії класів побудованої нейронної мережі представлена на рис.4.2, нижче приведено опис основних класів.

NeuralNetwork - клас, що описує логіку формування та навчання нейронної мережі, а також розпізнавання, за її допомогою, вхідного символу. Клас інкапсулює екземпляр класу, який реалізує інтерфейс IBackPropagation. Завдяки цьому екземпляру ми можемо формувати нейронні мережі з різною кількістю шарів не змінюючи сам клас NeuralNetwork.

IBackPropagation - проміжний інтерфейс, що дозволяє відокремити інтерфейс нейронної мережі від її реалізації.

BP3Layaer - клас, що реалізує інтерфейс IBackPropagation та описує нейронну мережу з трьома шарами нейронів. Він реалізує самі алгоритми навчання та розпізнавання через трьохшарову структуру нейронної мережі.

PreInput, Input, Hidden, Output - структури, що описують нейрони конкретних шарів (відповідно попередній, вхідний, прихований та вихідний шари). Однаковим полем для всіх структур, окрім Output, являється масив ваг. Для PreInput додатковим параметром є вхідне значення. Для Input, Hidden та Output розраховується вхідне, вихідне значення та помилка. Для Output додатковим параметром являється ціль (чи є вхідний символ правильним для виходу даного нейрону), а також саме символьне значення відповідного символу.

ImageProcessing - клас, який містить в собі 2 функції для опрацювання зображень. Перша інтерпретує зображення як масив чисел з плаваючою комою, а друга навпаки відновлює зображення з масиву.

Рисунок 4.2 - Ієрархія класів нейронної мережі

4.4 Алгоритм роботи нейронної мережі для задачі класифікації символів

4.4.1 Трансформація малюнку у машинний код

Навчання нейронної мережі починається з того, що потрібно обрати приклади для навчання. Розроблена програма використовує картинки у форматі. bmp, що знаходяться в окремій директорії. Кожна картинка має ім'я, що співпадає з символом, зображеним на ній. Це необхідно для подальшого функціонування алгоритму навчання.

Після вибору прикладів для навчання відбувається конвертація зображення в масив типу double. Спочатку розраховується середня ширина та висота усіх картинок. Далі розраховуються норми між розрахованим середнім значенням та реальним розміром даної. Потім попіксельно вираховуються кольори з клітинок. Після чого отримані результати записуються в масив.

4.4.2 Реалізація алгоритму зворотного поширення помилки

Для організації процесу навчання використовується алгоритм зворотного поширення помилки. Він був описаний у другому пункті даного розділу.

Перед етапом навчання йде етап формування нейронної мережі. За замовчанням формується нейронна мережа із наступної кількості шарів (формування автоматичне при виборі директорії та збереженні налаштувань):

1) (середня висота*середню ширину зображення (кількість значень у масиві double) + кількість прикладів навчання) * 0,33;

2) кількість нейронів першого шару поділена на 3;

3) кількість прикладів навчання.

Навчання відбувається почергово для кожної картинки з директорії. Алгоритм реалізується через 2 функції ForwardPropagate та BackPropagate. Перша виконує прямий хід через нейронні шари та призначена для встановлення початкових значень помилки на вихідному шарі. Друга робить зворотний хід цих помилок та призначена для корегування ваг на нейронних шарах.

Навчання системи продовжується поки помилка на виході не буде меншою від заданої користувачем або ж, якщо кількість ітерацій перевищить допустиму норму. Користувач також має можливість перервати навчання вручну.

На рис.4.3 зображено блок-схему роботи алгоритму навчання ШНМ методом зворотного поширення помилки.

Рисунок 4.3 - Блок-схема роботи алгоритму навчання

4.4.3 Програмна реалізація багатопоточності

Як було зазначалось раніше багатопоточність буде реалізована шляхом розпаралелювання в процесі навчання нейронної мережі, а саме обчислень на рівні нейронів в момент роботи алгоритму. Для програмної реалізації використано бібліотеку TPL.

Програмно використовується System. Threading. Tasks. Parallel, який забезпечую можливість паралельного виконання ітерацій на нейронному рівні.

4.4.4 Реалізація функції розпізнавання

Розпізнавання символів відбувається наступним чином. Зображення конвертується в масив типу double та подається на вхід мережі, після чого запускається функція прямого проходу і на виході ми отримуємо два найбільш вірогідних значення розпізнаного символу. Це 2 найбільших значення ваги на вихідному шарі.

4.5 Програмна реалізація нейронної мережі для розпізнавання символів

Розроблений програмний продукт призначений для розпізнавання символів латинського алфавіту та арабський цифр. Він орієнтований на багатрпоточні комп'ютерні середовища, адже в основі покладені паралельні алгоритми роботи.

4.5.1 Запуск та закриття програмного забезпечення

Для запуску та функціонування програми потрібно запустити файл BPNeuralNetwork. exe. Крім всього іншого на комп'ютері повинна знаходитись папка з файлами для навчання.

Після запуску відкривається головне вікно програми.

Для закриття програми достатньо закрити головне вікно.

4.5.2 Основні елементи інтерфейсу

Суть інтерфейсу це зручність та простота. Користувач не повинен витрачати багато часу на усвідомлення ситуації та прийняття рішення. Автором було запропоновано наступний вигляд інтерфейсу (Рис.4.4)

Рисунок 4.4 - Інтерфейс користувача

Drawing Area - поле, у якому можна малювати символи для розпізнавання. Тут також показується символ, що був завантажений з картинки.

Clear - кнопка очищення поля для малювання.

Кнопки для дії над нейронними мережами:

· Train Network - навчити нейронну мережу;

· Stop Training - переривання процесу навчання;

· Save Network - зберегти конфігурацію мережі після навчання;

· Load Network - завантажити вже готову навчену мережу.

Recognize - кнопка для запуску функції розпізнавання символів.

Поле Work Part містить:

· Draw Characters - при виборі даної опції можна малювати у полі Drawing Area;

· Choose Existing Image - є можливість завантаження картинки для розпізнавання з файлу.

State - у даному полі відображаються всі процеси, що зараз виконуються або виконалися раніше

Matched Patterns - у даному полі відображаються:

· Input - вхідне зображення;

· Matched High - найбільш вірогідне розпізнане зображення;

· Matched Low - друге найбільш вірогідне зображення.

Network Properties - поле, де можна обрати:

· Maximum Error - максимальну помилку мережі;

· Number of Input Unit - кількість нейронів у вхідному шарі;

· Number of Hidden Unit - кількість нейронів у другому шарі;

· Number of Output Unit - кількість нейронів у вихідному шарі.

Training Images Properties - поле, у якому обирається шлях до файлів навчання.

Save Sattings - кнопка збереження параметрів ШНМ.

4.5.3 Можливі проблеми та шляхи їх вирішення

Розроблене програмане забезпечення розроблене для платформи.net Framawork 4 та може працювати на довільній операційній системі сімейства Windows зі встановленою платформою. Програма потребує всього лише 1МБ памяті на диску.

При використанні даного програмного забезпечення можуть виникнути наступні проблеми:

1. Виникли помилки при навчанні

Це може бути зумовлено насамперед тим, що обрано некоректну директорію, тобто вона не містить прикладів для навчання. Шляхом вирішення є вибір коректної директорії. По-друге, неправильно обрані параметри для навчання нейронної мережі. Шляхом вирішення є перевірка введених параметрів на коректність.

2. Не розпізнаються символи, або розпізнаються некоректно.

Це може бути викликано, по-перше, тим що мережа навчена некоректно. Шляхом вирішення проблеми є повторний запуск алгоритму навчання. По-друге, намальоване зображення не відповідає жодному з прикладів, що використовувалися для навчання. Шляхом вирішення проблеми є зміна навчальних прикладів, або ж розширення діапазону прикладів навчання.

4.6 Тестування розробленого програмного забезпечення

4.6.1 Тестування роботи програмного забезпечення для виконання задач класифікації

Спочатку протестуємо здатність системи виконувати першочергове завдання - розпізнавати символи. Спочатку зазначимо, що навчання мережі відбувалося лише за одним набором варіантів символів, тому точність розпізнавання буде не достатньо високою.


Подобные документы

  • Топології нейронної мережі та їх застосування, варіанти вибору архітектури мереж, число проміжних шарів і число елементів, архітектури мереж користувачів. Мережі для задач з багатьма класами, операція додавання матриці втрат, багатошаровий перцептрон.

    контрольная работа [227,3 K], добавлен 21.06.2011

  • Специфіка застосування нейронних мереж. Огляд програмних засобів, що використовують нейронні мережі. Побудова загальної моделі згорткової нейронної мережі. Реалізація нейромережного модулю розпізнавання символів на прикладі номерних знаків автомобілів.

    дипломная работа [3,4 M], добавлен 15.03.2022

  • Характеристика інструментів MatLab - пакету прикладних програм для числового аналізу. Основні функції та можливості програмного комплексу. Скриптова мова програмування. Побудова моделі штучної нейронної мережі за допомогою команди NNTool та її тестування.

    лабораторная работа [215,8 K], добавлен 11.06.2015

  • Історія досліджень, пов’язаних з розпізнаванням образів, його практичне використання. Методи розпізнавання образів: метод перебору, глибокий аналіз характеристик образу, використання штучних нейронних мереж. Характерні риси й типи завдань розпізнавання.

    реферат [61,7 K], добавлен 23.12.2013

  • Технологічні процеси складання, монтажу, налагодження і тестування комп'ютерних мереж між двома чи більше комп'ютерами. Функціонування локальної обчислювальної мережі. Офісні програмні продукти з пакету MS Office. Топологія мережі підприємства "зірка".

    отчет по практике [1,5 M], добавлен 28.08.2014

  • Класифікація комп’ютерних мереж і топологій. Побудова функціональної схеми локальної мережі. Організація каналів зв’язку. Вибір способу керування мережею. Вибір конфігурації робочих станцій. Програмне забезпечення локальної мережі та захист інформації.

    курсовая работа [2,7 M], добавлен 15.06.2015

  • Історія створення комп’ютерних комунікацій та принципи їх побудови. Характеристика устаткування для створення комп’ютерних мереж. Поняття адресації, види протоколів, їх розвиток, комбінування та особливості використання. Стандарти бездротових мереж.

    курс лекций [1,3 M], добавлен 04.06.2011

  • Визначення поняття і дослідження структури топології комп'ютерних мереж як способу організації фізичних зв'язків персональних комп'ютерів в мережі. Опис схеми топології типів шина, зірка і кільце. Багатозначність структур топології комп'ютерних мереж.

    реферат [158,1 K], добавлен 27.09.2012

  • Характеристика особливостей побудови біологічних та штучних нейронних мереж. Вивчення їх активіаційних функцій: порогової бінарної, лінійної обмеженої, гіперболічного тангенса. Персептрони і зародження штучних нейромереж. Багатошарові нейронні мережі.

    реферат [1,2 M], добавлен 11.06.2010

  • Бібліотека Pcap та її реалізація WinPcap під платформу Windows. Аспекти робот з бібліотекою WinPcap. Штучні нейронні мережі. Застосування бібліотеки Winpcap для захоплення мережевого трафіку. Реалізація нейронної мережі Кохонена для аналізу заголовків.

    дипломная работа [2,2 M], добавлен 09.06.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.