ння і тестування мережі.
NetApproximation - Java проект, який здійснює отримання, обробку даних, виклик методів нейронної мережі і формування матриці апроксимації.
WebWeatherView - JavaServer Faces проект реалізує веб уявлення температурних даних.
3.4.1 Опис проекту JBPNet
Основними класами JBPNeuralNetwork є:
class NeuronBP - модель нейрона
Його основні поля - output - вихід нейрона, weights - вектор ваг.
Основними методами є - computeOutput - обчислити вихід нейрона, establishWeights - встановити ваги.
class LayerBP - модель шару
Основні поля цього класу - neurons - колекція нейронів шару, neuronQwt - число нейронів у шарі.
Основні методи - assign - створити нейрон, getNeuron - отримати нейрон.
class NeuralNetBP - модель мережі. Є найбільшим і значущим класом у проекті.
Містить такі поля як - layers - колекція шарів мережі, patternsInput - колекція навчальних прикладів, identError - максимально допустима величина помилки alpha - коефіцієнт крутизни сигмоидальной функції.
Найбільш значущими методами є - init - ініціалізувати мережу, teachOffLine - навчити мережу, adjustWeights - скорегувати ваги, activationF - обчислення функції активації, compute - обчислює вихід нейромережі відповідно представлених вхідних даних.
Опишемо основні аспекти програмної реалізації нейронної мережі з наведенням прикладів програмного коду для ілюстрації роботи програми.
Для зміни конфігурації мережі та її подальшої ініціалізації застосовувалася наступна послідовність команд:
int neurInLayers []={50,3,4} ;. init (3, neurInLayers);
Тобто створюється одновимірний масив, елементи якого це число нейронів у вхідному, прихованому і вихідному шарі відповідно. Потім neurInLayers передається методу init, який ініціалізує мережу. Тобто створює всі необхідні для роботи програми компоненти, такі як масиви для зберігання ваг, які заповнює довільними значеннями від 0 до 1, шляхом виклику відповідного методу.
net являє собою екземпляр класу NeuralNetBP, власне реалізує нейронну мережу.
Потім задаємо дані для навчання мережі:
net.addPattern (patternIn, patternOut);
Тут patternIn це масив з наступним вмістом:
latNorm, lonNorm, latNorm0, lonNorm0, TNorm0, latNorm1, lonNorm1, TNorm1, ..., latNorm24, lonNorm24, TNorm24.
А patternOut складається з одного елемента - TNorm - нормалізована температура в точці з координатами lat, lon в цей же момент часу.
Для кожного набору patternIn, patternOut викликається метод addPattern (), що заповнює відповідні поля мережі вхідними зразками.
Викликаємо методи, які визначають параметри необхідні для роботи мережі. Наведемо деякі з них:
net.setEpochCount (5000);
net.setMomentum (0.9);
net.setTeachRate (0.1);
net.setIdentError (0.001);
Перший метод визначає максимальну кількість ітерацій, який відводиться мережі на навчання.
У моїй мережі реалізований алгоритм імпульсу, що застосовується для підвищення стійкості мережі, метод setMomentum () задає коефіцієнт інерційності необхідний для роботи алгоритму.
Одним з параметрів в методі навчання нейромережі шляхом зворотного поширення помилки є коефіцієнт швидкості навчання. Він задається за допомогою методу setTeachRate ().
Параметром методу setIdentError () є величина помилки. Якщо величина помилки мережі стане менше цього значення, то навчання зупиняється, і вважається, що мережа успішно навчена. Помилка обчислюється за наступною формулою:
(20)
Де - реальне вихідна стан нейрона j-го вихідного шару нейронної мережі при подачі на її входи k-го образу, - потрібний вихідній стан цього нейрона.
Далі відбувається виклик методу навчального нейронну мережу:
net.teachOffLine ();
Цей метод виконує навчання мережі. Раз за разом виконуючи прямий і зворотний прохід метод прагне до мінімізації помилки, підлаштовуючи ваги відповідно методу зворотного поширення. Вихід з методу відбувається, або якщо помилка мережі стане менше заданої користувачем, або при досягненні максимально допустимого числа ітерацій.
Потім, вже навченої мережі пред'являються неоцінені тести наступним чином: pute (patternIn);
Метод compute () обчислю...