Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИИ / ИИ / СШІ / Лабораторна робота 2 сші.docx
Скачиваний:
33
Добавлен:
11.02.2015
Размер:
450.08 Кб
Скачать

Практична частина

Приклад 1. Створимо набір нейронних мереж і виберемо найефективнішу з них для вирішення задачі класифікації об'єктів-квіток трьох класів: Setosa, Versicol і Virginica.

Збережіть поточний мережевий набір, виконавши команду File->Network Set->Save As.

Закрийте вікно Data Set командою File->Close.

Закрийте вікна, що залишилися, крім головного вікна програми.

Відкрийте набір даних з файлу SNN\Iris.sta

Виконайте команду Edit->Cases->Shuffle->Group Sets щоб зібрати учбові зразки в групи, відповідні тренувальному, перевірочному і тестовому піднаборам даних.

Для змінної FLOWER встановіть тип OUTPUT.

Для змінних SLENGTH, SWIDTH, PLENGTH і PWIDTH встановіть тип INPUT.

Виконайте команду File->New->Intelligent Problem Solver. З'явиться вікно спеціального помічника для виконання настройок процесу рішення задачі і пошуку безлічі придатних мереж (IPS), показане на рис. 51. Виберіть опцію Advanced.

Рис. 51. Вікно вибору версії майстра IPS

Натисніть кнопку Next і в наступному вікні майстра (Рис. 52) виберіть тип вирішуваної задачі – Standard.

Рис. 52. Вікно вибору типу вирішуваної задачі

У наступному вікні (рис. 53), виберіть вихідну змінну із списку активних змінних в наборі вихідних даних. Натисніть кнопку Next.

Рис. 53. Вікно вибору вихідних змінних

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

Рис. 54. Вікно вибору вхідних змінних

У наступному вікні (рис. 55), виберіть опцію Use current division of Data Set, щоб підтвердити використання вже наявного розподілу зразків поточного набору даних по тренувальному і перевірочному піднаборах.

Рис. 55. Вікно вибору розподілу зразків по піднаборах даних

Оскільки в мережі, яка вирішує задачу класифікації об'єктів на більше ніж два класи, кількість елементів у вихідному шарі дорівнює кількості класів у вихідній змінній, то при проходженні вхідного зразка через мережу, кожний вихідний елемент видає значення активації. Воно порівнюється з порогами Accept і Reject. Зразок відноситься до того класу, якому відповідає вихідний елемент, значення активації якого більше значення Accept, за умови, що значення активації у решти вихідних елементів менше значення Reject. Інакше зразок позначається як Unknown (непізнаний). При Accept=0 і Reject=1 зразку призначається найбільш вірогідний клас.

Встановіть значення верхнього і нижнього порогів так як показано на рис. 56.

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

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

Рис. 57. Вікно вибору типів нейронних мереж

У наступному вікні встановіть опцію автоматичного визначення складності мережі (кількість елементів в прихованих шарах мережі). Для цього поставте мітку у відповідному прапорці (рис. 8).

Рис. 58. Вікно вибору кількості елементів в прихованих шарах для мереж вибраних типів

У наступному вікні (рис. 59), виберіть середню тривалість процедури пошуку нейронних мереж, встановивши опцію Medium (швидкий пошук оптимальної мережі).

Рис. 59. Вікно вибору тривалості процедури пошуку нейронних мереж

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

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

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

Для запуску процесу пошуку мереж натисніть на кнопку Finish.

Після закінчення процесу пошуку відкрийте вікно редактора мережевого набору командою Edit->Network Set і знайдіть поточну мережу (в даному випадку це остання мережа в списку, вона позначається символом «*»). Виберіть представлення Verbose. Оскільки тестовий набір нами не використовувався, то значення в полях Te.Perf і TeError будуть рівні нулю. Порівняйте значення в полях T.Perf і V.Perf, а також в полях T.Error і V.Error. Якщо T.Error значно менше ніж V.Error, то мережа піддалася перенавчанню. Якщо T.Perf і V.Perf також дуже відрізняються, то тренувальний і перевірочний піднабори сформовані невірно. Далі перейдіть до представлення Basic і вивчіть перелік мереж їх типи і складність.

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

Виконайте команду Edit->Pre/Post Processing і у вікні (Рис. 62), що відкрилося, перевірте значення порогів Accept і Reject. Зверніть увагу на значення «One-of-N» в стовпці і рядку Convert FLOWER в таблиці внизу вікна. Так позначається|значиться| функція інтерпретації сукупності значень активності на вихідних елементах мережі в значення номінальної змінної, відповідне одному з N класів при N > 2.

Рис. 62. Вікно редактора пре/пост обробки входів і виходів мережі

Виконайте команду Statistics->Classification Statistics, і у вікні, що відкрилося, натисніть кнопку Run (рис. 63). Рядок Total містить кількість об'єктів, що належать кожному з класів у відповідність з вихідними даними окремо для тренувального і перевірочного піднаборів. Рядок Correct містить кількість правильно класифікованих зразків. Рядок Wrong містить кількість неправильно класифікованих зразків. Рядок Unknown показує кількість зразків, які не вдалося класифікувати взагалі. Нижня частина таблиці (під межею) містить дві матриці, на головній діагоналі яких відображається кількість правильно класифікованих зразків кожного класу. Елементи, що не входять в головну діагональ, вказують на кількість об'єктів класу-рядка, які були неправильно віднесені до класу-стовпця.

Рис. 63. Статистика класифікації

Щоб протестувати роботу мережі на окремо взятому зразку даних, виконайте команду Run->Single Case. У вікні (Рис. 64), що відкрилося, виберіть зразок, що вас цікавить, використовуючи область Case No. Натисніть кнопку Run. Щоб проглянути результати, використовуйте секцію Outputs Shown. Виберіть опцію Variables. Зверніть увагу на значення в рядку Error. Слово Right означає, що клас, призначений зразку мережею (значення рядка Output), співпав з відповідним класом в стовпці FLOWER для даного зразка в наборі вихідних даних (значення рядка Target).

Рис. 64. Вікно застосування мережі для класифікації окремо взятого зразка з поточного набору даних. Представлення Variables

Виберіть представлення Activations (рис. 65). У рядку Output містяться три значення активації кожного з трьох елементів вихідного шару відповідних трем значенням змінної FLOWER. Значення в першому стовпці більше порогу Accept, значення в решті стовпців менше порогу Reject, отже зразку 7 призначається клас Setosa.

Рис. 65. Вікно застосування мережі для класифікації окремо взятого зразка з поточного набору даних. Представлення Activations

Виконайте команду Options->Activations in Color.

Виконайте команду Statistics->Network Illustration і відкрийте вікно з ілюстрацією мережі (рис. 66).

Зверніть увагу на третій шар мережі. Його перший елемент позначений червоним кольором, а два інших білим. Це означає, що мережа чітко визначила клас вхідного зразка, і позначила червоним кольором вихідний елемент, відповідний цьому класу. У даній мережі нейрони вихідного шару мають логістичну функцію активації. Тому межі зміни значень їх активності складають [0,1]. Це і визначає список використовуваних кольорів: червоний означає позитивне значення активації, близьке до одиниці; білий – позитивне значення активації близьке до нуля; зелений колір, означає негативне значення активації і в даному випадку взагалі не використовується.

Рис. 66. Ілюстрація мережі. Зразок №7 віднесений до класу Setosa. Класифікація виконана правильно

У вікні Run Single Case виберіть зразок 145 (рис. 67). Виберіть представлення Variables. Значення рядків Output і Target не однакові. Це означає, що даний зразок був класифікований неправильно. Тому в рядку Error міститься слово Wrong.

Рис. 67. Вікно застосування мережі для класифікації окремо взятого зразка з поточного набору даних. Представлення Variables. Класифікація виконана неправильно

У цьому ж вікні виберіть представлення Activations. У рядку Output найбільше значення активації відповідає класу Versicol, тоді як в вихідному наборі даних зразок позначений як Virginic (рис. 68).

Рис. 68. Вікно застосування мережі для класифікації окремо взятого зразка з поточного набору даних. Представлення Activations. Класифікація виконана неправильно.

Виконайте команду Run->Cluster Diagram. У вікні, що відкрилося (рис. 69), в секції Group by виберіть змінну FLOWER. Побудуйте парні діаграми розсіяння для змінних, по черзі вибираючи їх комбінації в секціях X і Y і натискаючи кнопку Update. Зверніть увагу на те, що змінні PLENGTH і PWIDTH в поєднанні одна з одною і з будь-якими іншими вхідними змінними (SLENGTH і SWIDTH), дають вдале розбиття зразків на кластери, відповідні класам в змінній FLOWER. Отже, змінні PLENGTH і PWIDTH є необхідними і достатніми для проведення правильної класифікації. Звичайно такий аналіз проводиться до початку побудови нейронної мережі. Проте не завжди його можна провести, і не завжди очевидний ефект кластеризації, особливо якщо вхідних змінних дуже багато, і до того ж вони істотно взаємопов'язані між собою. Виходячи з цього, припустимо, що в нашій мережі є надлишкова кількість вхідних змінних. Спробуємо їх визначити.

Рис. 69. Діаграма розсіяння, на якій чітко відображаються три кластери по змінних PLENGTH і PWIDTH

Виконайте команду Statistics->Sensitivity Analysis і у вікні, що з'явилося, натисніть на кнопку Update. Заповніть поле Threshold так як показано на рис. 70. У секції Baseline errors відображаються відповідно помилки на тренувальному і перевірочному наборах для мережі з початковою кількістю вхідних змінних. У таблиці кожній змінній окремо для тренувального і перевірочного піднаборів відповідає наступна статистика: помилка (Error) мережі у разі видалення з неї відповідної змінної; коефіцієнт (Ratio) рівний частці значень Baseline errors і Error; ранг (Rank), що привласнюється змінним при впорядковуванні їх по убуванню значень Ratio. Щоб відсікти зайві змінні натисніть кнопку Prune. Потім натисніть кнопку Update.

Значення інформаційних полів зміняться відповідно до показників нової мережі (рис. 71).

Рис. 70. Вікно аналізу чутливості мережі [4:4-4-3:1]

Рис. 71. Вікно аналізу чутливості мережі [3:3-4-3:1]

Збережіть спрощену мережу в мережевому наборі.

Знову спростіть її. Для цього знову натисніть на кнопку Prune, а потім на кнопку Update у вікні Sensitivity Analysis (рис. 72).

Рис. 72. Вікно аналізу чутливості мережі [2:2-4-3:1]

Виконайте команду Statistics->Network Illustration, щоб проглянути структуру спрощеної мережі (рис. 73).

Рис. 73. Структура спрощеної мережі з двома входами

Збережіть спрощену мережу в мережевому наборі.

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

Виявляється, що початкова мережа має найкращі показники, а мережа з двома входами – найгірші. Що робити?

Натренуйте мережу з двома входами, і додайте її в мережевий набір.

Для цього виконайте команду Train->Auxiliary->Stopping Conditions, і у вікні, що відкрилося, встановіть кількість епох (Epochs) рівним 50, а значення решти полів рівними нулю.

Виконайте команду Train->Multilayer Perceptrons->Back Propagation і встановіть параметри алгоритму зворотного поширення помилки.

Виконайте команду Train->Multilayer Perceptrons->Quasi-Newton щоб викликати вікно настройок алгоритму сполучених градієнтів.

Виконайте команду Train-> Auxiliary->Best Network.

Виконайте команду Statistics->Training Graph.

Відкрийте вікно мережевого набору командою Edit->Network Set і виберіть в ньому представлення Verbose. Потім натисніть на кнопку Options в даному вікні, щоб відкрити вікно настройок мережевого набору.

Розташуйте всі ці вікна в робочій області головного вікна SNN так, щоб вони не перекривали один одного.

Виконуйте експеримент з мережами таким чином:

1. Виберіть мережу, що вас цікавить, у вікні Network Set Editor і зробіть її поточною, використовуючи команду Select.

2. Натисніть на кнопку Clear у вікні Training Error Graph.

3. Встановіть параметри алгоритму Back Propagation.

4. Натисніть на кнопку Reinitialize у вікні Back Propagation.

5. Натисніть на кнопку Train в цьому ж вікні.

6. У вікні Training Error Graph вивчіть графік помилок на предмет виникнення перенавчання мережі (після убування обох помилок тренувальна помилка убуває або не змінюється, а перевірочна помилка монотонно збільшується), попадання мережі в точку мінімуму (графік однієї або обох помилок припиняє помітно змінюватися), наявність помітного монотонного зменшення помилок. Якщо спостерігається яке-небудь з перерахованих явищ, то повторіть кроки з 1 по 6.

7. Натисніть на кнопку Train у вікні Quasi-Newton.

8. Знову поспостерігайте за зміною помилок по графіку помилок у вікні Training Error Graph. Якщо видається повідомлення про досягнення алгоритмом мінімуму, то повторіть кроки з 1 по 8. При цьому змініть параметри алгоритму Back Propagation так, щоб надати бажаного характеру процесу зміни помилок.

9. Якщо значення перевірочної помилки набагато більше значення тренувальної помилки (див. вікно Training Error Graph), це означає, що відбулося значне перенавчання мережі. Повторіть кроки з 1 по 9. Якщо ж різниця незначна (немає відмінності в порядках величин), то порівняйте значення помилок у вікні Training Error Graph і значення помилок у вікні Retain Best Network. Якщо в другому вікні помилки менші ніж в першому (особливо це стосується помилок на перевірочному піднаборі даних), то натисніть кнопку Restore у вікні Retain Best Network щоб повернути поточну мережу в стан безпосередньо до початку перенавчання. У цьому стані перевірочна помилка мінімальна і відображається в полі Verification секції Network Errors даного вікна. Після натиснення на кнопку Restore значення полів в даному вікні будуть скопійовані в поля T і V секції Errors вікна Training Error Graph.

10. Натисніть на кнопку Add у вікні Network Set Editor, щоб додати навчену мережу в мережевий набір.

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

12. Порівняйте статистики класифікації для нової мережі і для кращої мережі з мережевого набору. Знайдіть випадки неправильної класифікації за допомогою таблиці вікна Run Data Set. Перевірте, де саме помиляється мережа.

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

Приклад 2. Створимо, навчимо, оцінимо і застосуємо нейронну мережу реалізуючу булеву функцію XOR.

1. Збережіть поточний мережевий набір, виконавши команду File->Network Set->Save As.

Закрийте вікно Data Set командою File->Close.

Закрийте вікна, що все залишилися, крім головного вікна програми.

2. Створіть новий набір даних. Для цього виконайте команду File->New->Data Set і у вікні, що з'явилося (рис. 74), вкажіть кількість вхідних змінних (Inputs = 2) і вихідних змінних (Outputs = 1). Натисніть на кнопку Create.

Рис. 74. Вікно задавання кількості вхідних і вихідних змінних в наборі вихідних даних

3. У вікні, що з'явилося, введіть таблицю істинності для функції XOR і дайте імена змінним так, як показано на рис. 75.

Рис. 75. Набір даних з таблицею істинності для функції XOR

Для вирішення задачі класифікації необхідно зробити змінну XOR номінальною і призначити їй дискретну множину найменувань класів {True, False}.

Для цього у вікні з даними в стовпці XOR замініть 0 на 2 і виконайте команду Edit->Variables->Name and Nominals. Встановіть мітки для значень змінної XOR так як показано на рис. 76. Для призначення числовим значенням символьних міток використовуйте секцію Value.

Рис. 76. Призначення змінній XOR множини імен класів

Після вказаних дій вікно з вихідними даними повинно мати вигляд, показаний на рис. 77.

Рис. 77. Набір даних з номінальною змінною XOR

Створіть новий мережевий набір виконавши команду File->Network Set->New.

Створіть нову мережу типу MLP. Для цього виконайте команду File->New->Network і у вікні, що з'явилося, введіть настройки так, як показано на рис. 28. Натисніть кнопку Create.

Рис. 78. Вікно помічника побудови мережі

Зверніть увагу на структуру мережі (рис. 79). У вихідному шарі присутній лише один нейрон, оскільки змінна XOR може приймати лише два можливі значення.

Рис. 79. Тришарова мережа з одним вихідним елементом

Відкрийте вікно редактора мережі командою Edit->Network, перейдіть до третього шару мережі і в секції Act fn і призначте для його нейронів логістичну (Logistic) функцію активації (рис. 80). Для переходу до потрібного шару набирайте його номер в полі Layer або користуйтеся стрілками праворуч від нього. Після закінчення настройки закрийте вікно.

Рис. 80. Настройки прихованого шару мережі і його елементів

Виконайте команду Edit->Pre/Post Processing, введіть значення верхнього (Accept) і нижнього (Reject) порогів активності, а також значення інших настройок (Output type, Pre/Post Processing) (рис. 81).

Рис. 81. Настройки пре/пост обробки входів і виходів мережі

Збережіть цю мережу в мережевому наборі. Для цього відкрийте вікно редактора мережевого набору командою Edit->Network Set. Додайте створену мережу в мережевий набір. Для цього натисніть кнопку Options і у вікні настройок мережевого набору, що відкрилося, натисніть кнопку Add. Виконайте команду File->Network Set->Save.

10. Приберіть всі непотрібні вікна з екрану. Відкрийте командою Statistics->Training Graph вікно з графіком зміни тренувальної (сині) перевірочної (червоної) помилок, натисніть на кнопку Clear (вона очищає біле полотно графіка і встановлює малювання ліній з його початку, не призводить до зміни вагів і порогів мережі), встановіть значення Interval (це частота малювання точок, вимірювана в епохах: наприклад Interval=2 означає, що точки малюються для кожної другої епохи).

Відкрийте командою Statistics->Training Graph вікно з графіком зміни тренувальної (сині) перевірочної (червоної) помилок, натисніть на кнопку Clear. Встановіть значення Interval=1.

Відкрийте командою Statistics->Case Errors вікно, в якому відображатиметься стовбчаста діаграма з помилками мережі на конкретних зразках. Встановіть опцію Real-time update.

Визначте умови зупинки алгоритму навчання мережі. Для цього виконаєте команду Train->Auxiliary->Stopping Conditions і проведіть настройки так, як показано на рис. 82.

Встановіть параметри алгоритму навчання і проведіть навчання мережі. Для цього виконайте команду Train-> Multilayer Perceptrons->Back Propagation і проведіть настройки так, як показано на рис. 82.

У вікні Back Propagation натисніть кнопку Reinitialize щоб ініціалізувати значення вагових коефіцієнтів зсувів і міжнейронних зв'язків мережі (якщо не натискали раніше кнопку Set у вікні Set Weights).

Рис. 82. Умови останову і параметри алгоритму Back Propagation

Ініціюйте виконання алгоритму навчання натисненням кнопки Train.

Спостерігайте за зміною вмісту вікон з графіками помилок і діаграмою помилок. Їх вигляд після закінчення процесу навчання мережі представлений на рис. 83 – 84.

Рис. 83. Підсумковий графік помилок

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

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

Рис. 85. Вікно мережевого набору з характеристиками мережі

Визначте якість мережі. Помилка на тренувальному наборі даних (див. колонку T.Error) має бути близькою до 0. Точність класифікації на тренувальному наборі даних (див. колонку T.Perf) має бути близькою до 1. Якщо ці умови виконуються, то навчена нами мережа правильно моделює функцію XOR.

Виконайте команду Statistics->Classification і у вікні, що відкрилося (рис. 86), натисніть на кнопку Run.

Рис. 86. Статистика класифікації

У відповідності з рис. 86 було проаналізовано 4 зразки (по 2 для кожного класу) і всі вони були класифіковані правильно.

Щоб протестувати роботу мережі на окремо взятому зразку даних, виконайте команду Run->Single Case. У вікні, що відкрилося (рис. 87), виберіть перший зразок, використовуючи область Case No. Натисніть кнопку Run. Щоб проглянути результати, використовуйте секцію Outputs Shown. Встановіть опцію Variables для проглядання значень вихідних змінних, що передбачаються мережею. Порівняйте показники мережі з таблицею істинності XOR.

Рис. 87. Представлення Variables. Класифікація зразка №1 виконана правильно

Виберіть опцію Activations (рис. 88) і порівняйте значення активації нейрона вихідного шару, значення порогів Accept і Reject. Значення в рядку Output більше порогу Accept. Зразок відноситься до класу False.

Рис. 88. Представлення Activations. Класифікація зразка №1 виконана правильно. Значення в рядку Output більше порогу Accept

Перемкніться на другий зразок (рис. 89 – 90). Значення в рядку Output менше порогу Reject. Зразок відноситься до класу True.

Рис. 89. Представлення Variables. Класифікація зразка №2 виконана правильно

Рис. 90. Представлення Activations. Класифікація зразка №2 виконана правильно. Значення в рядку Output менше порогу Reject

Аналогічно виконаєте аналіз для решти зразків з набору вихідних даних.

Для класифікації мережею незнайомого їй зразка, що не входить в поточний набір даних, виконайте команду Run->One-Off Case. У вікні, що відкрилося (рис. 91), введіть значення входів в рядку Input і виберіть опцію Variables в секції Outputs Shown. Натисніть кнопку Run. У рядку Output буде показаний результат класифікації – знак «?» тобто зразок не був розпізнаний.

Рис. 91. Представлення Variables. Зразок не розпізнаний

Перемкніться на представлення Activations (рис. 92). Значення в рядку Output Значення в рядку Output менше порогу Accept і більше порогу Reject. Це означає, що зразок потрапив в область сліпоти мережі.

Рис. 92. Представлення Activations. Зразок не розпізнаний. Значення в рядку Output менше порогу Accept і більше порогу Reject

Збережіть поточний набір даних, виконавши команду File->Save.

Збережіть поточний мережевий набір, виконавши команду File->Network Set->Save As.

Закрийте вікно Data Set командою File->Close.

Закрийте вікна, що все залишилися, крім головного вікна програми.

Соседние файлы в папке СШІ