ПЕРЕЛІК ДИСЦИПЛІН:
  • Адміністративне право
  • Арбітражний процес
  • Архітектура
  • Астрологія
  • Астрономія
  • Банківська справа
  • Безпека життєдіяльності
  • Біографії
  • Біологія
  • Біологія і хімія
  • Ботаніка та сільське гос-во
  • Бухгалтерський облік і аудит
  • Валютні відносини
  • Ветеринарія
  • Військова кафедра
  • Географія
  • Геодезія
  • Геологія
  • Етика
  • Держава і право
  • Цивільне право і процес
  • Діловодство
  • Гроші та кредит
  • Природничі науки
  • Журналістика
  • Екологія
  • Видавнича справа та поліграфія
  • Інвестиції
  • Іноземна мова
  • Інформатика
  • Інформатика, програмування
  • Юрист по наследству
  • Історичні особистості
  • Історія
  • Історія техніки
  • Кибернетика
  • Комунікації і зв'язок
  • Комп'ютерні науки
  • Косметологія
  • Короткий зміст творів
  • Криміналістика
  • Кримінологія
  • Криптология
  • Кулінарія
  • Культура і мистецтво
  • Культурологія
  • Російська література
  • Література і російська мова
  • Логіка
  • Логістика
  • Маркетинг
  • Математика
  • Медицина, здоров'я
  • Медичні науки
  • Міжнародне публічне право
  • Міжнародне приватне право
  • Міжнародні відносини
  • Менеджмент
  • Металургія
  • Москвоведение
  • Мовознавство
  • Музика
  • Муніципальне право
  • Податки, оподаткування
  •  
    Бесплатные рефераты
     

     

     

     

     

     

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

     

    Кибернетика

    МІНІСТЕРСТВО ОСВІТИ І

    ОСВІТИ І НАУКИ УКРАЇНИ

    Ростовський державний університет

    Кафедра біофізики І біокібернетики

    випускної кваліфікаційної роботи

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

    Студент

    І. Е. Шепелєв

    Науковий керівник А. І. Самарін

    ДО ЗАХИСТУ ДОПУСКАЮТЬ

    Зав. кафедрою д.б.н, професор

    Б. М. Володимирський

    м. Ростов-на-Дону

    1998

    ЗМІСТ

    Стор.
    Введення

    2
    1. Загальний опис досліджуваних нейронних мереж.
    2 Одношарові мережі. Персептрон.
    3 Багатошарові мережі.
    4 Мережі Хопфілда.
    5. Опис програмних моделей і алгоритмів їх навчання.
    6. Методика та результати експериментальних досліджень.
    7 Проблема функції виключає АБО.
    3.2 Дослідження представляемо одношарової і двошаровою нейронної мережі.
    3 Релаксація стимулу.
    4 Виникнення помилкового образу. Вироблення прототипу.
    5 бістабільних сприйняття.
    Висновок.
    Література.
    Додаток 1.
    Додаток 2.

    Введення.

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

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

    На початку 60х років Мінський, Розенблатта, Уіндроу та інші розробилимережі, що складаються з одного шару штучних нейронів. Часто званіперсептронамі, вони були використані для широкого класу задач, у тому числіі штучного зору. Однак Мінський і Пайперт [2] довели, щовикористовувані в той час одношарові мережі теоретично нездатні вирішитибагато простих завдання.

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

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

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


    1.Загальні опис досліджуваних нейронних мереж.


    1 Одношарові мережі. Персептрон.

    Відповідно до [3] персептрон є моделлю навчальноїрозпізнає системи. Він містить матрицю світлочутливих елементів (S -матеріалів), асоціативні елементи (А-елементи) і реагують елементи (R -матеріалів). По суті персептрон складається з одного шару штучнихнейронів, з'єднаних за допомогою вагових коефіцієнтів з безліччю входів.

    У 60-ті роки персептрони викликали великий інтерес. Розенблатта [3] довівтеорему про навчання персептрона і тим самим показав, що персептронздатний навчитися всього, що він здатний представляти. Уїдроу [12-15] давряд переконливих демонстрацій систем персептронного типу. Дослідженняможливості цих систем показали, що персептрони не здатні навчитисяряду простих завдань. Мінський [2] суворо проаналізував цю проблему іпоказав, що є жорсткі обмеження на те, що можуть виконуватиодношарові персептрони, і, отже, на те, чого вони можуть навчатися.

    Один з найбільш песимістичних результатів Мінського показує, що одношаровий персептрон не може відтворити таку просту функцію як
    виключає АБО. Це - функція від двох аргументів, кожен з яких може бути нулем або одиницею. Вона приймає значення одиниці, коли один з аргументів дорівнює одиниці (але не обидва). Якщо проблему представити за допомогою одношарової однонейронной системи, то легко бачити, що за будь-яких значеннях ваг і порогів неможливо розташувати пряму лінію, яка розділяє площину (простір образів) так, щоб реалізовувалася функція
    виключає АБО. Є великий клас функцій (поряд з функцією
    виключає Або), не реалізованих одношарової мережею. Про ці функції говорять, що вони є лінійно нероздільні, і вони накладають певні обмеження на можливості одношарових мереж. Лінійна разделімость обмежує одношарові мережі завданнями класифікації, в яких безлічі точок (відповідних вхідним значенням) можуть бути розділені геометрично. У випадку двох входів роздільник є прямою лінією. У випадку трьох входів поділ здійснюється площиною, розсікати тривимірний простір. Для чотирьох або більше входів візуалізація неможлива і необхідно подумки уявити n-мірний простір, розтинаєте''гіперплоскостью''- геометричним об'єктом, який розтинає простір чотирьох або більшої кількості вимірів. Як показано в [+11], ймовірність того, що випадково вибрана функція виявиться разделімой лінійно, досить мала. Так як лінійна разделімость обмежує можливості персептронного подання, то одношарові персептрони на практиці обмежені простими задачами.

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

    2 Багатошарові мережі.

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

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

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

    Для навчання штучних нейронних мереж широко застосовуєтьсяпроцедура зворотного поширення. Зворотне поширення булонезалежно запропоновано в трьох різних роботах [8, 9, 10]. У роботіпрограмно реалізована двошарова мережу зворотного поширення.

    1.3 Мережі Хопфілда.

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

    Дж. Хопфілд зробив важливий внесок як в теорію, так і в застосування системіз зворотними зв'язками. У його роботі [7] при імітації поведінки ансамблюнейронів використовувалися змінні, що описують стану нейронів (векторстану (), та змінні, які описують зв'язки між нейронами (операторпам'яті W), а також два рівняння, що визначають зміна (з часом.
    Одне з цих рівнянь являє зміна (під дією оператора W
    (вироблення реакції на стимул), а друге - зміна матриці W, квадратичнез ((запам'ятовування). При цьому вектор стану ансамблю нейронівявляє собою вектор у фазовому просторі динамічної системи, а
    ''пам'ять''реалізована як система аттракторів. Запам'ятовування новоїінформації здійснюється шляхом ускладнення за певним алгоритмомструктури аттракторів. Такий підхід допускає просту механічнуаналогію, якщо уявити собі вектор стану як положення частинки,що рухається під дією сили тяжіння і тертя по деякому рельєфу. Прискачування з''гори''в одну з низин''''потенційна енергія системизменшується, і врешті-решт матеріальна точка зупиняється черезтертя. Положення частки в кінцевому стані (тобто та з низин, вякою вона стає) залежить як від форми рельєфу, так і відпочаткового стану, з якого почалося скочування. Функціонуваннямережі легко візуалізується геометрично. У випадку двох бінарних нейронів увихідному шарі кожній вершині квадрата відповідає одна з чотирьохстанів системи (00,01,10,11). У разі тринейронну системипростір образів представлено кубом (в тривимірному просторі),що має 8 вершин, кожна з яких позначена трехбітовим бінарним числом. Узагальному випадку система з n нейронами має 2n різних сосояній іпредставляється n - мірним гіперкуба. Коли подається новий вхідний вектор,мережа переходить з вершини на вершину, поки не стабілізується. Стійкавершина визначається мережевими вагами, поточними входами і величиною порогу.
    Якщо вхідний вектор частково неправильний або неповний, то мережустабілізується до вершини, найближчої до бажаної.

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


    2. Опис програмних моделей і алгоритмів їх навчання.

    У роботі моделюється персептрон з послідовними зв'язками,який являє собою передавальну мережа складається з генераторів сигналутрьох типів: сенсорних елементів, асоціативних елементів і реагуютьелементів. Як сенсорних елементів використовуються комірки вимірювальноїсітківки. Сітківка складається з 35 елементів. S-елемент видає вихіднийсигнал Si = 1, якщо відповідна йому осередок сітківки зафарбована; Si =- 1 вІнакше. Кожен S-елемент пов'язаний з відповідним А-елементом івихідний сигнал А-елемента дорівнює вихідного сигналу S-елементу.
    Топологічна структура персептрона з двома R-елементами така, щокожен А-елемент пов'язаний з усіма елементами. Ці зв'язку мають ваговимикоефіцієнтами, які модифікуються методом корекції помилок. Такатопологічна структура зручна з точки зору її програмної реалізації.
    Вихід мережі представлений двома R-елементами, то цільові вектора мають вигляд (-
    1, 1) та (1, -1) в залежності від пропонованої навчальної пари.

    Навчання персептрона відбувається за наступною схемою:

    1. Всі ваги рандомізіруются в величини з діапазону (-0.5, +0.5).
    На вхід мережі подається навчальний вектор і обчислюється вихід кожного нейронаяк алгебраїчна сума його зважених входів.
    У моделі використаний метод навчання Уїдроу - Хоффа [15], де використовуєтьсябезперервний сигнал, щоб обчислити помилку для кожного нейрона, тобтовіднімається вихідний сигнал, як алгебраїчна сума його зважених входів,з запланованого виходу.

    4.Корректіруется ваги мережі так, щоб мінімізувати помилку. (див.
    Додаток 2. Програма, що моделює одношарову мережу. )

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

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

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

    Навчання мережі зворотного поширення в моделі відбувалося занаступною схемою:
    Всім ваг присвоєні початкові значення, обрані випадковим чином здіапазону (-0.5, +0.5).
    Вибирається чергова навчальна пара з навчального безлічі і подаєтьсявхідний вектор на вхід мережі.
    Прохід вперед. Обчислюється вихід мережі. Обчислення виконуються пошарово.
    Спочатку обчислюються виходи першого нейронного шару, потім вони використовуютьсяв якості входів другого шару; обчислюються виходи нейронів другого шару,які й утворюють вихідний вектор мережі.
    Обчислюється різниця між виходом мережі і необхідним виходом (цільовимвектором навчальної пари), тобто кожен з виходів мережі вираховується звідповідної компоненти цільового вектора, щоб отримати помилку.
    Зворотній прохід. Коригується ваги мережі так, щоб мінімізуватипомилку. Так як для кожного нейрона вихідного шару задано цільове значення,то помилка перебуває з використанням модифікованого дельта-правила дляперсептрона. Виходи нейронів прихованого шару не мають цільових значень дляпорівняння, то для пошуку помилки (і корекції ваги) робиться ряд кроків,складові алгоритми підстроювання ваг вихідного і прихованого шарів (див.
    Додаток 2. Програма, що моделює мережу зворотного поширення).
    Повторюються кроки з другого по п'яте для кожного вектора навчальногобезлічі до тих пір, поки помилка на всьому безлічі не досягнеприйнятного рівня. Величина граничної помилки змінюється в ціляхексперимен?? та.

    У моделі мережі використовується метод прискорення навчання для алгоритмузворотного поширення, запропонований в [9], що збільшує такожстійкість процесу. Цей метод, названий імпульсом, полягає вдодаванні до корекції ваги члена, пропорційного величині попередньогозміни ваги. Коефіцієнт імпульсу вибрано рівним 0.5.

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

    Для дослідження мережі із зворотними зв'язками в роботі моделюєтьсязапропонований Хопфілда в [7] рекурентних алгоритм аналізу динамікиансамблю нейронів.

    Стан мережі описується безліччю поточних значень сигналів від всіхнейронів. На кожному кроці алгоритму змінюється стан лише одного нейрона.
    Номер нейрона вибирається випадковим чином. Він підсумовує з вагами Wijсигнали, що надходять від виходів нейронів мережі по зворотним зв'язків ізмінює свій стан у відповідності зі значенням граничної функції.
    Стан же інших нейронів збігається зі станом на попередньому кроці.
    Пороги збудження нейронів вибрані що дорівнюють нулю. Стан активногонейрона на поточному кроці алгоритму дорівнює 1, неактивного - -1. Алгоритмвикористовує модель навчання, запропоновану Хеббом [6] (див. Додаток 2.
    Програма, що моделює мережу Хопфілда.). Це - модель навчання без учителя,у якій вага зростає, якщо обидва активовані нейрона, джерело іприймач. Таким чином, часто використовувані шляху в мережі посилюються, щопояснює феномен навчання мережі.

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

    Усі програми створені в DELPHI і працюють в операційному середовищі Windows.

    3. Методика та результати експериментальних досліджень.

    1 Проблема функції виключає АБО.

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

    Для того, щоб проілюструвати цю проблему, персептронунадавали чотири навчальні пари. До одного класу образів відносили,що подається на вимірювальну сітківку 5х7, шахове поле і таке ж поле,але з інвертіруемим кольором. До іншого класу - літерні символи E і F (див.
    Рис.1 Додаток 1.). У результаті розпізнавання персептрон класифікувавперший із зазначених образів як відноситься до першого класу, а другий,третій і четвертий - до другого. Тобто персептрон помилився на другому образі.

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

    2 Дослідження представляемо одношарової і двошаровою нейронної мережі.

    Дослідження представляемо одношарової і двошаровою нейроннихмереж вироблялися на відповідних моделях.

    Результати експерименту з моделлю персептрона показали, що персептронздатний моделювати функцію, що розділяє зображення цифр 1, 2, 3, 4, 5,
    6, 7, 8 і 9, що подаються на сітківку, на два класи - парні і непарні (див.
    Рис. 2. Додаток 1.). Величина допустимої помилки мережі була дорівнює 0.001.

    Наступний експеримент був поставлений для з'ясування здатностіперсептрона і двошаровою мережі зворотного поширення класифікуватибуквено-цифрові зображення (десять цифр і двадцять шість літер латинськогоалфавіту) на два класи - цифри і букви (див. Рис. 3. Додаток 1.). Прирівні допустимої помилки 0.001 персептрон плутав класами цифри 1, 3, 7 ібукву А. Мережа зворотного поширення при тому ж рівні допустимої помилки
    0.001 плутала класами цифри 3, 4, 5 і букви S, I. Далі величина помилкизменшувалася на порядок. Персептрон плутав клас цифри 1, мережа зворотногорозповсюдження - класами цифру 3 і букви S, I. При рівні допустимоїпомилки 0.00001 персептрон плутав класами цифру 1. Мережа зворотногорозповсюдження при тому ж рівні допустимої помилки 0.00001 плутала класбукви S. При рівні допустимої помилки 0.000001 і персептрон, і мережазворотного поширення помилок у класифікації не допускали.

    3 Релаксація стимулу.

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

    5 Виникнення помилкового образу. Вироблення прототипу.

    стійкими станами мережі Хопфілда можуть бути також образи, незаписані її пам'ять - помилкові образи. На Рис. 5. Додаток 1. показанийприклад сталого помилкового образу ((), що виникає при розпізнаванністимулів мережею, в матриці зв'язків якій записані образи a, b, c.

    При збільшенні числа образів, записуваних в пам'ять системи, що відповідаютьїм мінімуми енергії можуть зливатися. На рис. 6. Додаток 1. показанагрупа образів (що виходять при невеликих спотвореннях), записані в пам'ятьмережі - a, b, c. При пред'явленні мережі цих образів для розпізнавання, мережаприходить до стану, що відповідає виробленому прототипу - d.

    Модель демонструє процедуру разобученія, призначену дляусунення з пам'яті помилкових образів. Разобученіе полягає в пред'явленнімережі образу, до якого релаксувати стимул. При цьому з матриці зв'язкувіднімається той член, який при навчанні б додавався. У застосуванні донагоди прототипу з трьома записаними в пам'яті образами (див. Рис. 6.
    Додаток 1.), Разобученіе призводить до зникнення прототипу і до появизамість однієї потенційної ями, що відповідає прототипу, трьохпотенційних ям, відповідних кожному образу, записаного в пам'ятімережі.

    6 бістабільних сприйняття.

    Експерименти з моделлю мережі Хопфілда показали (див. Рис. 7. Додаток
    1.), Що середні стимули послідовності можуть сприйматися або якспотворений лівий, або як спотворений правий образи, тобто має місцебістабільних сприйняття. Зміна сталого стану відбувається післяпред'явлення четвертої картинки.

    Висновок.

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

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

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

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

    Літераура.

    1.Горбань А.Н., Росією Д.А.. Нейронні мережі на персональному компьюере.

    2 . Мінський М.Л., Пайперт С.. Персепрони.М.: Мір.1971

    3. Розенблатта Ф. Принципи нейродінамікі.М.: Мір.1965

    4. Уоссермен Ф. Нейрокомпьютерная техніка.М.: Мір.1992.237С

    5. Cohen MA, Grossberg SGAbsoiute stability of global pattern formation and parallel memory storage by compatitive neural networks.1983
    6. Hebb DOOrganization of behavior.New York: Science Edition
    7. Hopfield JJNeural networks and physical systems with emergent collective computational abilities. Proseedings of the National

    Academy of Science 79.1982
    8. Parker D.B. Learning-logic. Invention Report. 1982
    9. Rumelhart D.E. Hinton G.E., Williams R.J. Learning internal representations by error propagation. In Parallel distributed processing, vol.1986
    10. Werbos P.G. Beyond regression: New tools for prediction and analysis in the behavioral sciences. 1974
    11. Wider R.O. Single-stage logic, Paper presented at the AIEE Fall

    General Meeting. 1960
    12. Windrow B. The speed of adaptetion in adaptive control system. 1961
    13. Windrow B. A statistical theory of adaptetion. Adaptive control systems. 1963
    14. Windrow B., Angell J.B. Reliable, trainable networks for computing and control. 1962
    15. Windrow B., Hoff N.E. Adaptive switching circuits. 1960

    Додаток 1.

    Рис. 1.

    Рис. 2.

    Рис. 3.

    Рис. 3.

    Рис. 4.

    Рис. 5.

    Рис. 6.

    Рис. 7.

    Додаток 2.

    Програма, що моделює одношарову мережу. unit UPerc;

    interface

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    Dialogs,

    Percept_Field, StdCtrls, Buttons, ExtCtrls; const InputLayerUnits = 35;

    OutputLayerUnits = 2; eta = 0.05; epsilon = 0.000001; numberpatterns = 36; type

    TFrmPerceptron = class (TForm)

    Percept_FieldPerc: TPercept_Field;

    GroupBoxTrain: TGroupBox;

    GroupBoxInit: TGroupBox;

    ComboBoxABC: TComboBox;

    ComboBoxDigits: TComboBox;

    BtnNext: TButton;

    BitBtnClose: TBitBtn;

    EditNumPat: TEdit;

    LabelNumPat: TLabel;

    GroupBoxRec: TGroupBox;

    LabelInput: TLabel;

    BtnOutput: TButton;

    LabelOdd: TLabel;

    RadioGroupTarget: TRadioGroup;

    RadioButtonOdd: TRadioButton;

    RadioButtonEven: TRadioButton;

    LabelOr: TLabel;

    LabelEven: TLabel; procedure ComboBoxABCChange (Sender: TObject); procedure ComboBoxDigitsChange (Sender: TObject); procedure Percept_FieldPercMouseDown (Sender: TObject;

    Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtnCloseClick (Sender: TObject); procedure FormCreate (Sender: TObject); procedure BtnNextClick (Sender: TObject); procedure BtnOutputClick (Sender: TObject); private

    (Private declarations) public

    (Public declarations) end;

    var

    FrmPerceptron: TFrmPerceptron;

    var w: array [1 .. OutputLayerUnits, 1 .. InputLayerUnits] of real ; indexBtnNextClick: byte; activation: array [1 .. OutputLayerUnits] of real;

    OutputLayerOutput: array [1 .. OutputLayerUnits] of shortint; target: array [1 .. numberpatterns, 1 .. OutputLayerUnits] of shortint; v: array [1 .. numberpatterns, 1 .. InputLayerUnits] of shortint; implementation

    ($ R *. DFM) procedure TFrmPerceptron.Percept_FieldPercMouseDown (Sender: TObject;

    Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    var m, k: BYTE; correctRect: shortint;

    L, T, H, V: INTEGER ; begin

    L: = 0;

    T: = 0;

    H: = Percept_FieldPerc.UnitHorizontal;

    V: = Percept_FieldPerc.UnitVertical; for m: = 1 to Percept_FieldPerc.UnitRectVert do begin for k: = 1 to Percept_FieldPerc.UnitRectHorz do begin

    if (XL) and (YT) then begin correctRect: = k + Percept_FieldPerc. UnitRectHorz * (m-1); if (Button = mbLeft) and

    (Percept_FieldPerc.Brushes [correctRect] = Percept_FieldPerc.BackGroundBr ush) then begin

    Percept_FieldPerc.Brushes [correctRect] : = Percept_FieldPerc.RectBrush; end else if (Button = mbRight) and

    (Percept_FieldPerc.Brushes [correctRect] = Percept_FieldPerc.RectBrush) th en begin

    Percept_FieldPerc.Brushes [correctRect] : = Percept_FieldPerc.BackGroundBr ush; end;

    end; inc (L, Percept_FieldPerc.UnitHorizontal); inc (H, Percept_FieldPerc.UnitHorizontal); end; inc (T, Percept_FieldPerc.UnitVertical); inc (V , Percept_FieldPerc.UnitVertical);

    L: = 0;

    H: = Percept_FieldPerc.UnitHorizontal; end;

    end;

    procedure TFrmPerceptron.BitBtnCloseClick (Sender: TObject); begin

    Close; end;

    procedure TFrmPerceptron.FormCreate (Sender: TObject); var i, j: byte; rand: real; begin

    // numberpatterns: = 2;// 10;

    EditNumPat.Text: = inttostr (numberpatterns);

    BtnNext.Font.Color: = clRed; indexBtnNextClick: = 0;

    LabelInput.Visible: = False;

    // ******************** *************************

    Randomize;// випадкові ваги (-0.5,0.5) for i: = 1 to OutputLayerUnits do begin for j: = 1 to InputLayerUnits do begin rand: = Random-0.5; w [i, j]: = rand; end; end;

    end;

    procedure TFrmPerceptron.BtnNextClick (Sender: TObject); var i, j, m: byte; sum: real; neterror, err: real; error: array [1 .. OutputLayerUnits] of real; stop: boolean; krandom: integer; begin indexBtnNextClick : = indexBtnNextClick 1; for m: = 1 to InputLayerUnits do begin if (Percept_FieldPerc.Brushes [m] = Percept_FieldPerc.RectBrush) then begin v [indexBtnNextClick, m]: = 1; end else if

    (Percept_FieldPerc.Brushes [m] = Percept_FieldPerc.BackGroundBrush) then begin v [indexBtnNextClick, m]: =- 1; end; end;

    // ************ ****** ODD or EVEN ********************* if RadioButtonOdd.Checked then begin target [indexBtnNextClick, 1]: = 1; target [indexBtnNextClick, 2]: =- 1; end else if RadioButtonEven.Checked then begin target [indexBtnNextClick, 1]: =- 1; target [indexBtnNextClick, 2]: = 1; end;

    // *** ************************************************ if ( indexBtnNextClick +1) = numberpatterns then begin

    BtnNext.Caption: = 'last'; end else begin if (indexBtnNextClick) = numberpatterns then begin

    BtnNext.Font.Color: = clWindowText ;

    BtnNext.Caption: = 'finished';

    LabelInput.Font.Color: = clRed;

    LabelInput.Visible: = True; end else begin

    BtnNext.Caption: = 'next'; end; end;

    //********************* MAIN ******************************* if (indexBtnNextClick) = numberpatterns then begin repeat stop: = false; for m: = 1 to numberpatterns do begin for i: = 1 to OutputLayerUnits do begin sum: = 0; for j: = 1 to InputLayerUnits do begin sum: = sum + w [i, j] * v [m, j];

    end; activation [i]: = sum; if sum> = 0 then begin

    OutputLayerOutput [i]: = 1; end else begin

    OutputLayerOutput [i] : =- 1; end; end; neterror: = 0; for i: = 1 to OutputLayerUnits do begin err: = target [m, i]-activation [i]; error [i]: = err; neterror: = neterror +0.5 * sqr (err); end; if neterror = 0 then begin

    OutputLayerOutput [i]: = 1; end else begin

    OutputLayerOutput [i]: =- 1; end; end; neterror: = 0; for i: = 1 to OutputLayerUnits do begin err: = target [m, i]-activation [i]; error [i]: = err; neterror: = neterror +0.5 * sqr ( err); end; for i: = 1 to OutputLayerUnits do begin for j: = 1 to InputLayerUnits do begin w [i, j]: = w [i, j] + eta * error [i] * v [m, j ]; end; end; end;

    end;// if

    until stop;// end; end;// if end;

    procedure TFrmPerceptron . BtnOutputClick (Sender: TObject); var z: array [1 .. InputLayerUnits] of shortint; m, i, j: byte;

    Output: array [1 .. InputLayerUnits] of real; sum: real; begin for m: = 1 to InputLayerUnits do begin if (Percept_FieldPerc.Brushes [m] = Percept_FieldPerc.RectBrush) then begin z [m]: = 1; end else if

    (Percept_FieldPerc.Brushes [ m] = Percept_FieldPerc.BackGroundBrush) then begin z [m]: =- 1; end; end; for i: = 1 to OutputLayerUnits do begin sum: = 0; for j: = 1 to InputLayerUnits do begin sum: = sum + w [i, j] * z [j]; end;

    Output [i]: = sum; end; if (Output [1]> Output [2]) then begin < p> LabelOdd.Font.Color: = clRed;

    LabelEven.Font.Color: = clWindowText; end else begin if (Output [2]> Output [1]) then begin

    LabelEven.Font.Color: = clRed;

    LabelOdd.Font.Color: = clWindowText; end; end; end; end.

    Програма, що моделює мережу зворотного поширення

    unit UBack;

    interface

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,

    Dialogs,

    StdCtrls, Percept_Field, Buttons, ExtCtrls; const FirstLayerUnits = 35;

    SecondLayerUnits = 20;

    ThirdLayerUnits = 2; numberpatterns = 36;

    NumLayers = 3; epsilon = 0.000001; eta = 0.05; alpha = 0.5;

    type

    TFrmBack = class (TForm)

    BitBtnClose: TBitBtn;

    Percept_FieldBack: TPercept_Field;

    GroupBoxTrain: TGroupBox;

    ComboBoxABC: TComboBox;

    ComboBoxDigits: TComboBox;

    GroupBoxInit: TGroupBox;

    EditNumPat: TEdit;

    LabelNumPat: TLabel;

    BtnNext: TButton;

    GroupBoxRec : TGroupBox;

    LabelInput: TLabel;

    RadioGroupTarget: TRadioGroup;

    RadioButtonLetter: TRadioButton;

    RadioButtonFigure: TRadioButton;

    ButtonOut: TButton;

    LabelFigure: TLabel;

    LabelOr: TLabel;

    LabelLetter: TLabel; procedure BitBtnCloseClick (Sender: TObject); procedure ComboBoxABCChange (Sender: TObject); procedure ComboBoxDigitsChange (Sender: TObject); procedure Percept_FieldBackMouseDown (Sender: TObject;

    Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate (Sender: TObject ); procedure BtnNextClick (Sender: TObject); procedure ButtonOutClick (Sender: TObject); private

    (Private declarations) public

    (Public declarations) end;

    var

    FrmBack: TFrmBack; var wFirstSecond: array [1 .. SecondLayerUnits, 1 .. FirstLayerUnits] of real; wSecondThird: array [1 .. ThirdLayerUnits, 1 .. SecondLayerUnits] of real; indexBtnNextClick: byte; target: array [1 .. numberpatterns, 1 .. ThirdLayerUnits] of real; v: array [1 .. numberpatterns, 1 .. FirstLayerUnits] of real; implementation

    ($ R *. DFM )

    procedure TFrmBack.BitBtnCloseClick (Sender: TObject); begin

    Close; end; procedure TFrmBack.Percept_FieldBackMouseDown (Sender: TObject;

    Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var m, k: BYTE; correctRect: shortint;

    L, T, H, V: INTEGER; begin

    L: = 0;

    T: = 0;

    H: = Percept_FieldBack.UnitHorizontal;

    V: = Percept_FieldBack.UnitVertical; for m: = 1 to Percept_FieldBack. UnitRectVert do begin for k: = 1 to Percept_FieldBack.UnitRectHorz do begin

    if (XL) and (YT) then begin correctRect: = k + Percept_FieldBack.UnitRectHorz * (m-1); if (Button = mbLeft) and

    (Percept_FieldBack.Brushes [correctRect] = Percept_FieldBack.BackGroundBr ush) then begin

    Percept_FieldBack.Brushes [correctRect]: = Percept_FieldBack.RectBrush; end else if (Button = mbRight) and

    (Percept_FieldBack.Brushes [correctRect] = Percept_FieldBack.RectBrush) th en begin

    Percept_FieldBack.Brushes [correctRect]: = Percept_FieldBack.BackGroundBr ush; end;

    end; inc (L, Percept_FieldBack.UnitHorizontal); inc (H, Percept_FieldBack.UnitHorizontal); end; inc (T, Percept_FieldBack.UnitVertical); inc (V, Percept_FieldBack.UnitVertical);

    L: = 0;

    H: = Percept_FieldBack.UnitHorizontal; end;

    end;

    procedure TFrmBack.FormCreate (Sender: TObject); var i , j: byte; rand: real;

    begin

    EditNumPat.Text: = inttostr (numberpatterns);

    BtnNext.Font.Color: = clRed; indexBtnNextClick: = 0;

    LabelInput.Visible: = False;

    // ********************** ***********************

    Randomize;// випадкові ваги (-0.5,0.5) for i: = 1 to SecondLayerUnits do begin for j: = 1 to FirstLayerUnits do begin rand: = Random-0.5; wFirstSecond [i, j]: = rand; end; end; for i: = 1 to ThirdLayerUnits do begin for j: = 1 to SecondLayerUnits do begin rand : = Random-0.5; wSecondThird [i, j]: = rand; end; end;

    end;

    procedure TFrmBack.BtnNextClick (Sender: TObject); var i, j , m: byte; sumFirstSecond, sumSecondThird: real; stop: boolean;

    OutputSecond: array [1 .. SecondLayerUnits] of real;

    OutputThird: array [1 .. ThirdLayerUnits] of real; output, err, neterror: real;

    OutLayerError: array [1 .. ThirdLayerUnits] of real;

    SecondLayerError: array [1 .. SecondLayerUnits] of real;

    FirstLayerError: array [1 .. FirstLayerUnits] of real; dWeightSecondThird: array [1 .. ThirdLayerUnits, 1 .. SecondLayerUnits] of real; dWeightFirstSecond: array [1 .. SecondLayerUnits, 1 .. FirstLayerUnits] of real; dWeight: real; krandom: integer; begin indexBtnNextClick: = indexBtnNextClick 1; for m: = 1 to FirstLayerUnits do begin if (Percept_FieldBack.Brushes [m] = Percept_FieldBack.RectBrush) then begin v [indexBtnNextClick, m]: = 1; end else if

    (Percept_FieldBack.Brushes [m] = Percept_FieldBack.BackGroundBrush) then begin v [indexBtnNextClick, m]: =- 1; end; end;

    // ****************** ODD or EVEN ********************* if RadioButtonFigure.Checked then begin target [ indexBtnNextClick, 1]: = 0.9;// 1; target [indexBtnNextClick, 2]: = 0.1;// -1; end else if RadioButtonLetter.Checked then begin target [indexBtnNextClick, 1]: = 0.1;// -1; target [indexBtnNextClick, 2]: = 0.9;// 1; end;

    // ************************* **************************

    if (indexBtnNextClick +1) = numberpatterns then begin

    BtnNext.Caption: = 'last'; end else begin if (indexBtnNextClick) = numberpatterns then begin

    BtnNext.Font.Color: = clWindowText;

    BtnNext.Caption: = 'finished ';

    LabelInput.Font.Color: = clRed;

    LabelInput.Visible: = True; end else begin

    BtnNext.Caption: =' next ' ; end; end;

    //*********************** MAIN ************ ************** if (indexBtnNextClick) = numberpatterns then begin repeat stop: = false; for m: = 1 to numberpatterns do begin for i: = 1 to SecondLayerUnits do begin sumFirstSecond: = 0 ; for j: = 1 to FirstLayerUnits do begin sumFirstSecond: = sumFirstSecond + wFirstSecond [i, j] * v [m, j]; end;

    OutputSecond [i]: = 1/(1 + exp (-sumFirstSecond)); end; for i: = 1 to ThirdLayerUnits do begin sumSecondThird: = 0; for j: = 1 to SecondLayerUnits do begin

    sumSecondThird: = sumSecondThird + wSecondThird [i, j] * OutputSecond [j]; end;

    OutputThird [i]: = 1/(1 + exp (-sumSecondThird)); end; neterror: = 0; for i: = 1 to ThirdLayerUnits do begin output: = OutputThird [i]; err: = target [m, i]-output;

    OutLayerError [i]: = output * (1-output) * err; neterror: = neterror +0.5 * sqr ( err); end; if neterrorOutputThird [2]) then begin

    LabelFigure.Font.Color: = clRed;

    LabelLetter.Font.Color: = clWindowText; end else begin if ( OutputThird [2]> OutputThird [1]) then begin

    LabelLetter.Font.Color: = clRed;

    LabelFigure.Font.Color: = clWindowText; end; end;

    end;

    end.

    Програма, що моделює мережу Хопфілда

    unit UHop;

    interface

    uses

    Windows, Messages, SysUtils,

    Classes, Graphics, Controls,

    Forms, Dialogs, StdCtrls, Buttons, Percept_Field;

    const numberneurons = 35; type

    TFrmHop = class (TForm)

    BitBtnClose: TBitBtn;

    GrpBoxTraining: TGroupBox;

    GrpBoxInitial: TGroupBox;

    EditThres: TEdit;

    EditNumPat: TEdit;

    LabelThres: TLabel;

    LabelNumPat: TLabel;

    BtnNext: TButton;

    GrpBoxRec: TGroupBox;

    LabelInput: TLabel;

    BtnOutput: TButton ;

    BitBtnCancel: TBitBtn;

    ButtonDelay: TButton;

    ComboBoxABC: TComboBox;

    ComboBoxDigits: TComboBox; < p> Percept_FieldHop: TPercept_Field;

    ButtonRetrain: TButton; procedure Percept_FieldHopMouseDown (Sender: TObject;

    Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure BitBtnCloseClick (Sender : TObject); procedure EditNumPatChange (Sender: TObject); procedure EditThresChange (Sender: TObject); procedure FormCreate (Sender: TObject); procedure BtnNextClick (Sender: TObject); procedure BtnOutputClick (Sender: TObject); procedure BitBtnCancelClick (Sender: TObject ); procedure ButtonDelayClick (Sender: TObject); procedure ComboBoxABCChange (Sender: TObject); procedure ComboBoxDigitsChange (Sender: TObject); procedure ButtonRetrainClick (Sender: TObject); private

    (Private declarations) public

    (Public declarations) end;

    var

    FrmHop: TFrmHop;

    var numberpatterns, threshold: shortint; w: array [1 .. numberneurons, 1 .. numberneurons] of shortint; iindex, jindex, indexBtnNextClick: byte; stop: boolean; implementation

    ($ R *. DFM)

    procedure TFrmHop.Percept_FieldHopMouseDown (Sender : TObject;

    Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var m, k: BYTE; correctRect: shortint;

    L, T, H, V : INTEGER; begin

    L: = 0;

    T: = 0;

    H: = Percept_FieldHop.UnitHorizontal;

    V : = Percept_FieldHop.UnitVertical; for m: = 1 to Percept_FieldHop.UnitRectVert do begin for k: = 1 to Percept_FieldHop.UnitRectHorz do begin

    if (XL) and (YT) then begin correctRect: = k + Percept_FieldHop.UnitRectHorz * (m-1); if (Button = mbLeft) and

    (Percept_FieldHop.Brushes [correctRect] = Percept_FieldHop.BackGroundBrus h) then begin

    Percept_FieldHop.Brushes [ correctRect]: = Percept_FieldHop.RectBrush; end else if (Button = mbRight) and

    (Percept_FieldHop.Brushes [correctRect] = Percept_FieldHop.RectBrush) then

    begin < p> Percept_FieldHop.Brushes [correctRect]: = Percept_FieldHop.BackGroundBrus h; end;

    end; inc (L, Percept_FieldHop.UnitHorizontal); inc (H, Percept_FieldHop.UnitHorizontal); end; inc (T, Percept_FieldHop.UnitVertical); inc (V, Percept_FieldHop.UnitVertical);

    L: = 0;

    H: = Percept_FieldHop.UnitHorizontal; end;

    end ;

    procedure TFrmHop.BitBtnCloseClick (Sender: TObject); begin

    Close; end;

    procedure TFrmHop.EditThresChange (Sender: TObject); begin threshold: = strtoint (EditThres.Text); end;

    procedure TFrmHop.EditNumPatChange (Sender: TObject); begin numberpatterns: = strtoint (EditNumPat.Text); end;

    procedure TFrmHop. FormCreate (Sender: TObject); var i, j: byte; begin threshold: = 0;

    EditThres.Text: = inttostr (threshold); numberpatterns: = 3;

    EditNumPat . Text: = inttostr (numberpatterns);

    BtnNext.Font.Color: = clRed; for i: = 1 to numberneurons do begin for j: = 1 to numberneurons do begin w [i, j]: = 0; end; end; indexBtnNextClick: = 0;

    LabelInput.Visible: = False; end;

    procedure TFrmHop.BtnNextClick (Sender: TObject); var i, j, m: byte; v: array [1 .. numberneurons] of shortint;

    begin

    indexBtnNextClick: = indexBtnNextClick 1; for m: = 1 to numberneurons do begin if (Percept_FieldHop . Brushes [m] = Percept_FieldHop.RectBrush) then begin v [m]: = 1; end else if (Percept_FieldHop.Brushes [m] = Percept_FieldHop.BackGroundBrush) then begin v [m]: = 0; end; end; for i: = 1 to numberneurons-1 do begin for j: = i +1 to numberneurons do begin w [i, j]: = w [i, j] + (2 * v [i] -1) * (2 * v [j] -1); w [j, i]: = w [i, j]; end; end; if (indexBtnNextClick +1) = numberpatterns then begin

    BtnNext.Caption: = ' last '; end else begin if (indexBtnNextClick) = numberpatterns then begin

    BtnNext.Font.Color: = clWindowText;

    BtnNext.Caption: =' finished ';

    LabelInput.Font.Color: = clRed;

    LabelInput.Visible: = True; end else begin

    BtnNext.Caption: = 'next'; end; end;

    end;

    procedure TFrmHop.BtnOutputClick (Sender: TObject); var i, j, m, indicator: byte; y, z: array [1 .. numberneurons] of shortint; wij, wijthres: shortint; k: longint;

    begin for m: = 1 to numberneurons do begin if (Percept_FieldHop.Brushes [m] = Percept_FieldHop.RectBrush) then begin z [m]: = 1; end else if (Percept_FieldHop.Brushes [m] = Percept_FieldHop.BackGroundBrush) then begin z [m]: = 0; end; end; for m: = 1 to numberneurons do begin y [m]: = z [m]; end ; indicator: = 0; while indicator = 0 do begin for i: = 1 to numberneurons do begin wij: = 0; for j: = 1 to numberneurons do begin if ij then wij: = wij + w [i, j] * z [j]; end; wijthres: = wij-threshold; if wijthres> = 0 then z [i]: = 1 else z [i]: = 0; end; i: = 1; while inumberneurons; end; end; (while) end; (while) for m: = 1 to numberneurons do begin if z [m] = 1 then begin

    Percept_FieldHop.Brushes [m]: = Percept_FieldHop.RectBrush; end else if z [ m] = 0 then begin

    Percept_FieldHop.Brushes [m]: = Percept_FieldHop.BackGroundBrush; end; stop: = false; repeat

    Application.ProcessMessages; until stop; end; end ;

    procedure TFrmHop.BitBtnCancelClick (Sender: TObject); var i, j: byte; begin

    BtnNext.Font.Color: = clRed; for i: = 1 to numberneurons do begin for j: = 1 to numberneurons do begin w [i, j]: = 0; end; end; indexBtnNextClick: = 0;

    LabelInput.Visible: = False

         
     
         
    Реферат Банк
     
    Рефераты
     
    Бесплатные рефераты
     

     

     

     

     

     

     

     
     
     
      Все права защищены. Reff.net.ua - українські реферати ! DMCA.com Protection Status