. Для вхідного нейрона методи наведені в лістингу 3.2, для елементів прихованих і вихідного шарів у - лістингу 3.3.
Лістинг 3.2 - Методи функціонування вхідного нейрона
public double getINResult (double tempResult)
{= 0.0;=sum + ves_koef [0] * tempResult;=getINResultat (sum); result;
} double getINResultat (double param)
{res=param; res;
}
Лістинг 3.3 - Методи функціонування невходного нейронаdouble getResult (double [] tempResult)
{= 0.0; (int i=0; i lt; vxodi; i ++)
{(i lt; (vxodi - 1)) sum=sum + ves_koef [i] * (tempResult [i]); sum=sum + ves_koef [i] * 1;
}=getResultat (sum); result;
} double getResultat (double param)
{res=1.0/(1.0 + Math.exp (-param));
return res;
}
В обох випадках, лістинги 3.2 і 3.3, метод getResult повертає зважену суму, причому параметром є результат функціонування попереднього шару, у разі вхідного шару - це дані вводяться користувачем. Метод getResultat повертає результат перетворення зваженої суми відповідно до функцією активації. Як зазначалося в розділі 2, для вхідних елементів це лінійна функція, а для всіх інших - це найбільш поширена з нелінійних - сигмовидна функція.
У процесі навчання необхідно мати доступ до полів об'єкта, тобто змінювати вагові коефіцієнти нейрона. Метод такого доступу вказано в лістингу 3.4.
Лістинг 3.4 - Зміна вагового коефіцієта нейрона
public void setVesKoef (int j, double tmp)
{temp=ves_koef [j] + tmp; _koef [j]=(float) temp;
}
Решта методів, наведені в повному лістингу в додатку В, необхідні для правильної роботи нейронної мережі в цілому.
. 2.2 Розробка модуля шару нейронної мережі
У будь нейронної мережі є вхідний шар та вихідний прошарок, може бути і декілька прихованих шарів, може бути і один прихований шар, а може і не бути зовсім. Згідно з цим, кожен шар створюється з параметром tip, який надалі накладає обмеження у функціонуванні даного шару і всіх нейронних елементів шару. У лістингу 3.5 приведений конструктор об'єкта класу описує шар нейронної мережі. Крім параметра tip, необхідно і достатньо вказати кількість нейронних елементів в даному шарі - capacityNeironov, і vxodi - кількість елементів у попередньому шарі. Останній параметр потрібен для правильного створення об'єктів нейронних елементів для поточного шару, оскільки він відповідає кількості входів в кожен нейрон. Але для вхідного шару, цей параметр не враховується, оскільки не існує попереднього шару по відношенню до вхідного шару.
Лістинг 3.5 - Конструктор класу Шар нейронної мережі
public Layer (String tip, int capacityNeironov, int vxodi)
{estvo=capacityNeironov;=new ArrayList (koli4estvo) ;. toLowerCase (); (tip == in )
{= koli4estvo;=1; (int i=0; i lt; koli4estvo; i ++)
{neiron1=new Neiron (1, output, in ) ;. add (neiron1);
}. trimToSize ();
}
{(tip == out )
{= vxodi;=koli4estvo; (int i=0; i lt; koli4estvo; i ++)
{neiron1=new Neiron (input, 1, out ) ;. add (neiron1);
}. trimToSize ();
}
{(tip == sub )
{= vxodi;=1; (int i=0; i lt; koli4estvo; i ++)
{neiron1=new Neiron (input, output, sub ) ;. add (neiron1);
}. trimToSize ();
}
}
}
}
Крім перерахованого вище, кожен шар має такі поля як: список масивів massivNeironov, що містить об'єкти нейронних елементів; масив massivRas4et - масив результатів функціонування шару, тобто значення функції активації кожного нейронного елемента шару; масив massivOshibok - масив помилок усіх нейронних елементів шару в процесі навчання. Список масивів massivNeironov заповнюється елементами під час створення об'єкта шару нейронної мережі, два останніх масиву спочатку инициализируются і встановлюються рівними null. Масив massivRas4et використовується як при навчанні, так і при подальшому функціонуванні нейронної мережі, а massivOshibok необхідний тільки на стадії навчання.
Для процесу розрахунку результату використовується метод, наведений у...