Здравствуйте, уважаемые знатоки нейронных сетей! Прошу вашей помощи в разъяснении следующего момента.
В зарубежной статье по машиностроению, наткнулся на пример использования нейронной сети Хопфилда. Заданы 5 идеальных образов (в виде изображений 10x6 пикселей), затем задаются различные входные образы и показаны результаты их распознавания. Вот изображение из статьи с идеальными образами и результатами распознания: http://www.feeltlt.ru/public/nn.jpg
Решил написать программку на delphi чтобы полностью повторить результаты распознания, описанные в статье.
Я следовал такому алгоритму:
1. Рассчитал весовую матрицу (если клеточка белая то брал значение -1, если черная, то 1):
for i:=1 to 60 do
for j:=1 to 60 do
W[i,j]:=m1[i]*m1[j]+m2[i]*m2[j]+m3[i]*m3[j]+m4[i]*m4[j]+m5[i]*m5[j]+m6[i]*m6[j]; //m1 - первый идеальный образ, m2 - второй и т.д.
2. Задаю входное воздействие, которое сохраняю в массиве Y[i], где i=1..60
3. Рассчитывается новое S[i] состояние нейронов в два этапа:
3.1 перемножение W[i,j] и Y[i]:
for i:=1 to 60 do
for j:=1 to 60 do
peremnozhenie[i,j]:=W[i,j]*Y[i];
3.2 суммирование:
for i:=1 to 60 do
for j:=1 to 60 do
s[i]:=s[i]+peremnozhenie[i,j];
4. Рассчитываю новое значение аксонов:
for i:=1 to 60 do
if s[i]>=0 then s[i]:=1
else s[i]:=-1;
5. Затем проверка на соответствие одному из образов-идеалов, если не соответствует, то: Y[i]:=S[i] и повторить начиная с шага 3.
К сожалению повторить те же результаты, что описаны в зарубежной статье мне не удалось - распознание происходит не корректно. Уважаемые знатоки нейронных сетей, подскажите, где я просчитался. Заранее благодарю за оказанную Вами помощь!