лістингу 3.6. При виклику цього методу вказується порядковий номер шару в моделі нейронної мережі, і значення, що надходять на цей шар. Порядковий номер служить для того щоб відрізнити вхідний шар від інших. т.к. методи нейронів вхідного шару відрізняються від методів інших нейронів.
Лістинг 3.6 - Метод обчислює значення на виході всіх нейронів шару
public double [] makeRas4et (int thisSloi, double [] lastSloiResult)
{et=new double [koli4estvo]; (int i=0; i lt; koli4estvo; i ++)
{n=(Neiron) massivNeironov.get (i); (thisSloi == 0)
{= lastSloiResult [i];=n.getINResult (temp);
}
{= n.getResult (lastSloiResult);
} et [i]=temp;
}
return massivRas4et;
}
У процесі навчання, згідно з алгоритмом зворотного поширення помилки, необхідно скоригувати вагові коефіцієнти відповідно до (2.6).
Лістинг 3.7 - Метод коригувальний вагові коефіцієнти нейронів шару
public void izmenenieVesov (double normaObu4, double [] resultPreL, double [] oshibki)
{(int i=0; i lt; koli4estvo; i ++)
{n=(Neiron) massivNeironov.get (i); (int j=0; j lt;=resultPreL.length; j ++)
{(j!=resultPreL.length)
{= oshibki [i] * normaObu4 * resultPreL [j] ;. setVesKoef (j, temp);
}
{= oshibki [i] * normaObu4 * 1; .setVesKoef (j, temp);
}
}
}
}
Решта методів, даного класу, наведені в додатку Б, необхідні для правильної реалізації перерахованих вище методів.
3.3 Об'єднання модулів в нейронну мережу
Фактично, об'єднання вищеописаних модулів в нейронну мережу рівносильно створенню об'єкта класу нейронної мережі. Створення об'єкта класу нейронної мережі відбувається на підставі схематичного зображення всіх верств у вікні програми, з точним зазначенням кількості нейронних елементів в кожному шарі. Серед параметрів конструктора класу нейронної мережі, наведеному в лістингу 3.8, слід зазначити наступні:
- aIn - ціле число, рівне числу нейронів у вхідному шарі;
- aSubS - ціле число, рівне кількості прихованих шарів;
- aSub - цілочисельний масив, елементами якого є значення кількості нейронних елементів в кожному з прихованих шарів;
- aOut - ціле число, рівне числу нейронів у вихідному шарі;
Лістинг 3.8 - Конструктор класу нейронна сетьNet (Frame owner, int aIn, int aSubS, int [] aSub, int aOut)
{= aIn;=aSubS;=new int [subS]; (int i=0; i lt; subS; i ++)
{[i]=aSub [i];
}=aOut;=2 + subS;=new ArrayList (); (int i=0; i lt; layers; i ++)
{(i == 0)
{= new Layer ( in raquo ;, in, in) ;. add (l);
}
{(i!=layers - 1)
{preL=(Layer) massivLayers.get (i - 1); v=sub [i - 1] ;. setVIxodi (v);=new Layer ( sub raquo ;, sub [i- 1], preL.getVIxodi ()) ;. add (l);
}
{preL=(Layer) massivLayers.get (i - 1) ;. setVIxodi (out);=new Layer ( out raquo ;, out, preL.getVIxodi ()) ;. add ( l);
}
}
}=new VvodKartinki (owner, in);
}
При роботі конструктора класу, присвоюються значення таким полях об'єкта як кількість нейронів у вхідному, вихідному і, якщо такі існують, прихованих шарах, заповнюється список масивів massivLayers - це масив в якому зберігаються всі об'єкти класу шару нейронної мережі , і створюється об'єкт діалогового вікна VvodKartinki для введення користувачем інформації, на підставі якої нейронна мережа буде або навчатися або проводити розрахунок.
Для збереження моделі нейронної мережі в файл, передбачений метод, лістинг 3.9, який зберігає нейронну мережу як набір масивів: кількість шарів, кількість нейронів у кожному шарі, кожен шар як масив нейронів.
Лістинг 3.9 - Метод збереження нейронної мережі
public void SaveNet (String fileToSave)
{fileName=fileToSave; .toLowerCase (); (! fileName.endsWith ( ))
{n=fileName.length ();=fileName.substring (0, n) + raquo ;;