ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 63
- 64
- 65
- 66
- 67
- …
- следующая ›
- последняя »