Курсовая работа: Распознавание слов естественного языка с использованием нейросетей
private void calculate_input_layer_errors()
{
double sum;
for (int i = 0; i < MAX_INP; i++)
{
sum = 0; // {Сумма ошибок скрытого слоя}
for (int j = 1; j < MAX_HID; j++)
{ sum = sum + hl[j].E * hl[j].w[i]; }
ipl[i].E = ipl[i].a * (1 - ipl[i].a) * sum;
}
}
Используя формулы (9), (10), (11) получим функцию, обучающую весовые коэффициенты и пороговые уровни:
private void weight_change()
{ //i обозначает нейрон скрытого слоя, j - выходного
for (int j = 0; j < MAX_OUT; j++) //выходнойслой
{ for (int i = 0; i < MAX_HID; i++) //Подстройка}
{ ol[j].change[i] = BETA * ol[j].E * hl[i].a + M * ol[j].change[i];
ol[j].w[i] = ol[j].w[i] + ol[j].change[i]; }
//Подстройказначенияпорога
ol[j].t_change = BETA * ol[j].E * 1 + M * ol[j].t_change;
ol[j].threshold = ol[j].threshold + ol[j].t_change; // }
//Модифицируем веса между входным слоем и скрытым слоем
…
//Модифицируем веса между входами и входным слоем
… } }
Далее объединим вышеуказанные функции в одном методе back_propogate().
В общем виде функция обучения сети будет выглядеть следующим образом:
public void train_the_network()
{ blank_changes();//Очисткапредыдущихзначений changes}