Контрольная работа: Нейронная сеть Хемминга
else
IBroke2->Canvas->Pixels [x] [y] =clBlack;
5.Алгоритм распознавания
Общий алгоритм распознавания для сети Хэмминга состоит из четырёх частей:
1. подача распознаваемого образа на входы сети;
2. передача данных с первого слоя на второй;
3. обработка данных вторым слоем;
4. выбор распознанного образа.
1. Алгоритм работы первого этапа выглядит так :
1. Выбирается очередной нейрон;
2. Обнуляется его выход;
3. Локализуется и приводится изображение к нужному масштабу (см. п 3.3.3);
4. Локализованный образ поточечно подаётся на входы i-го нейрона. Если k-я точка образа чёрная, то к значению выхода прибавляется значение веса k-го входа, в противном случае это значение вычитается;
5. Значение выхода пропускается через функцию линейного порога;
6. Переход на шаг 1, пока не исчерпаны все нейроны первого слоя.
Исходный код:
for (int i=0; i<M; i++) { InputRow [i]. fOutput=0;
// Подаём образ на нейроны первого слоя for (int x=0; x<iDestSize; x++) for (int y=0; y<iDestSize; y++) if (Source->Canvas->Pixels [x] [y] ==clBlack) InputRow [i]. fOutput+=InputRow [i]. fW [x*iDestSize+y] ;
else InputRow [i]. fOutput+=-InputRow [i]. fW [x*iDestSize+y] ;
// Выход - через функцию линейного порога if (InputRow [i]. fOutput>=N/2) InputRow [i]. fOutput=N/2;
}
Теперь надо передать данные с выходов первого слоя на входы второго и в список результатов предыдущего прохода распознавания. Это совсем просто:
floatfOutputs [M] ; // Копия выходов предыдущего прохода for (inti=0; i<M; i++) { SecondRow [i]. fOutput=fOutputs [i] =InputRow [i]. fOutput;
SecondRow [i]. fSum=0;
}
Теперь может начинать работу второй слой. Рассмотрим алгоритм его работы:
1. Обнуляется счётчик итераций;
2. Запоминаются выходы нейронов в списке результатов предыдущего прохода;
3. Перебирается сеть по нейронам;
4. i-й нейрон посылает свой выход на i-й вход каждого нейрона;