Нейросетевые технологии. Каширина И.Л. - 65 стр.

UptoLike

Составители: 

65
if i2.Canvas.Pixels[x-1,y-1]=clBlack then
InputRow[i].Output:= Inpu-
tRow[i].Output+InputRow[i].W[x*DestSize+y];
else InputRow[i].Output:= InputRow[i].Output-
InputRow[i].W[x*DestSize+y];
if InputRow[i]. Output>=N/2 then
InputRow[i].Output:=N/2; // Выход - через функцию линейного порога
end
ния: На втором этапе надо передать данные с выходов первого слоя на
входы второго и в список результатов предыдущего прохода распознава
for i:=1 to m do
begin
SecondRow[i].Output= InputRow[i].Output;
Outputs[i]:=InputRow[i].Output;
SecondRow[i].Sum=0;
end
На третьем этапе начинает работу второй слой по следующей схеме.
1. Обнуляется счётчик итераций.
2. Запоминаются выходы нейронов в списке результатов предыдущего
прохода.
3. Перебираются поочередно все нейроны.
4. Каждый нейрон принимает значения выходов всех нейронов, суммиру-
ет их, предварительно умножив на коэффициент
ε
(кроме случая, когда
нейрон принимает своё же значение, которое остается без изменения).
5. Полученную сумму каждый нейрон посылает на свой выход.
6. Переход на шаг 2, пока выходы нейронов на текущей итерации не сов-
падут с выходами на предыдущей или пока счётчик числа итераций не
превысит некоторое значение. Теоретически второй слой должен
рабо-
тать пока его выходы не стабилизируются, но на практике количество
итераций искусственно ограничивают. Исходный код:
Count:=0;
repeat
for i:=1 to m do // Значения предыдущей итерации
begin
Outputs[i]:=SecondRow[i].Output;
SecondRow[i].Sum = 0;
end
for i:=1 to m do // Один шаг работы второго слоя
for j:=1 to m do
if i=j then // c его выходов на его же входы
SecondRow[j].Sum := SecondRow[j].Sum+ Sec-
ondRow[i].Output;
else
SecondRow[j].Sum := SecondRow[j].Sum+ Sec-
ondRow[i].Output * e;
Flag:=true;
for i:=1 to m do
begin
SecondRow[i].Output = SecondRow[i].Sum
If (Outputs[i] <> SecondRow[i].Output) then flag:=false;
    if i2.Canvas.Pixels[x-1,y-1]=clBlack then
           InputRow[i].Output:= Inpu-
tRow[i].Output+InputRow[i].W[x*DestSize+y];
    else   InputRow[i].Output:= InputRow[i].Output-
InputRow[i].W[x*DestSize+y];
    if InputRow[i]. Output>=N/2 then
       InputRow[i].Output:=N/2; // Выход - через функцию линейного порога
end

ния: На втором этапе надо передать данные с выходов первого слоя на
входы второго и в список результатов предыдущего прохода распознава
for i:=1 to m do
begin
 SecondRow[i].Output= InputRow[i].Output;
 Outputs[i]:=InputRow[i].Output;
 SecondRow[i].Sum=0;
end

На третьем этапе начинает работу второй слой по следующей схеме.
1. Обнуляется счётчик итераций.
2. Запоминаются выходы нейронов в списке результатов предыдущего
прохода.
3. Перебираются поочередно все нейроны.
4. Каждый нейрон принимает значения выходов всех нейронов, суммиру-
ет их, предварительно умножив на коэффициент ε (кроме случая, когда
нейрон принимает своё же значение, которое остается без изменения).
5. Полученную сумму каждый нейрон посылает на свой выход.
6. Переход на шаг 2, пока выходы нейронов на текущей итерации не сов-
падут с выходами на предыдущей или пока счётчик числа итераций не
превысит некоторое значение. Теоретически второй слой должен рабо-
тать пока его выходы не стабилизируются, но на практике количество
итераций искусственно ограничивают. Исходный код:
   Count:=0;
   repeat
     for i:=1 to m do // Значения предыдущей итерации
       begin
        Outputs[i]:=SecondRow[i].Output;
        SecondRow[i].Sum = 0;
       end
     for i:=1 to m do // Один шаг работы второго слоя
      for j:=1 to m do
          if i=j then // c его выходов на его же входы
                    SecondRow[j].Sum := SecondRow[j].Sum+ Sec-
   ondRow[i].Output;
                    else
                    SecondRow[j].Sum := SecondRow[j].Sum+ Sec-
   ondRow[i].Output * e;
     Flag:=true;
     for i:=1 to m do
       begin
          SecondRow[i].Output = SecondRow[i].Sum
          If (Outputs[i] <> SecondRow[i].Output) then flag:=false;
                                     65