Искусственные нейронные сети. Каширина И.Л. - 48 стр.

UptoLike

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

48
begin
DGImg.Enabled:=false;
for i:=0 to n-1 do
for j:=0 to n-1 do imgmatrix[i,j]:=0;
DGImg.Enabled:=true;
Mainform.DGImg.Repaint;
end;
Распознавание изображения на сетке:
procedure TMainForm.BtnCheckClick(Sender: TObject);
var i,j:integer;
sum:real;//вход персептрона
rety,//полученный выход персептрона
test:shortint;//направление корректировки весов (+1 или -1)
begin
sum:=0;
// ìàñøòàáèðóåì изображение на сетке до ее границ
Mainform.BtnScaleClick(Sender);
// ïîäñ÷èòûâàåì îòâåò ïåðcåïòðîíà äëÿ èìåþùåйñÿ ìàòðèöû âåñîâ
for i:=0 to n-1 do
for j:=0 to n-1 do
sum:=sum+imgmatrix[i,j]*weights[i,j];
if sum>0 then rety:=1 else rety:=0;
if rety=1 then
test:=Application.MessageBox('Êðåñòèê?','Ðåçóëüòàò',MB_ICONQUESTION or MB_YESNO)
else
test:=Application.MessageBox('Íîëèê?','Ðåçóëüòàò',MB_ICONQUESTION or MB_YESNO);
if test=IDNO then
// îáó÷àåì персептрон в случае неправильного ответа
begin
if rety=0 then test:=1 else test:=-1;
for i:=0 to n-1 do
for j:=0 to n-1 do
//корректируем веса по формуле
weights[i,j]:=weights[i,j]+speed*test*imgmatrix[i,j];
//сохраняем измененные веса в файл
SaveWeights('./weights.wts');
end;
end;
Программная реализация сети Хэмминга
В качестве примера программной реализации сети Хэмминга рассмотрим реше-
ние упражнения 4 из § 7, то есть программу, распознающую черно- белые изо -
бражения цифр от 0 до 9 (реализованную в среде Delphi). Эталонные образы со-
держатся в файлах 0.bmp, 1.bmp, ,9.bmp.
Размер распознаваемого входного образа (bmp-файл) должен быть 100х100 то-
чек (параметр SourceSize), а перед обработкой он приводится к размеру 40x40
(параметр DestSize). Таким образом , количество входов сети 1600 (параметр n).
Количество выходов m совпадает с количеством цифр и равняется 10. Вес отрица-
тельной обратной связи
ε
второго слоя был принят равным -0.05.
Описание типов , констант и переменных:
type InputNeiron =recopd // Тип нейрон первого слоя
w: array[1..n] of real; // Весовые коэффициенты входов
Output: real; // Выход
end;
Neiron= recopd // Тип нейрон второго слоя
Output:real; // Выход
                                         48
begin
  DGImg.Enabled:=false;
  for i:=0 to n-1 do
     for j:=0 to n-1 do imgmatrix[i,j]:=0;
  DGImg.Enabled:=true;
  Mainform.DGImg.Repaint;
end;

Распознавание изображения на сетке:
procedure TMainForm.BtnCheckClick(Sender: TObject);
var i,j:integer;
  sum:real;//вход персептрона
  rety,//полученный выход персептрона
  test:shortint;//направление корректировки весов (+1 или -1)
begin
  sum:=0;
// ìàñøòàáèðóåì изображение на сетке до ее границ
  Mainform.BtnScaleClick(Sender);
// ïîäñ÷èòûâàåì îòâåò ïåðcåïòðîíà äëÿ èìåþùåйñÿ ìàòðèöû âåñîâ
  for i:=0 to n-1 do
  for j:=0 to n-1 do
     sum:=sum+imgmatrix[i,j]*weights[i,j];
  if sum>0 then rety:=1 else rety:=0;
  if rety=1 then
  test:=Application.MessageBox('Êðåñòèê?','Ðåçóëüòàò',MB_ICONQUESTION or MB_YESNO)
else
  test:=Application.MessageBox('Íîëèê?','Ðåçóëüòàò',MB_ICONQUESTION or MB_YESNO);
  if test=IDNO then
// îáó÷àåì персептрон в случае неправильного ответа
  begin
     if rety=0 then test:=1 else test:=-1;
     for i:=0 to n-1 do
     for j:=0 to n-1 do
//корректируем веса по формуле
       weights[i,j]:=weights[i,j]+speed*test*imgmatrix[i,j];
//сохраняем измененные веса в файл
     SaveWeights('./weights.wts');
  end;
end;
                 Программная реализация сети Хэмминга
В качестве примера программной реализации сети Хэмминга рассмотрим реше-
ние упражнения 4 из § 7, то есть программу, распознающую черно-белые изо-
бражения цифр от 0 до 9 (реализованную в среде Delphi). Эталонные образы со-
держатся в файлах 0.bmp, 1.bmp,…,9.bmp.
Размер распознаваемого входного образа (bmp-файл) должен быть 100х100 то-
чек (параметр SourceSize), а перед обработкой он приводится к размеру 40x40
(параметр DestSize). Таким образом, количество входов сети — 1600 (параметр n).
Количество выходов m совпадает с количеством цифр и равняется 10. Вес отрица-
тельной обратной связи ε второго слоя был принят равным -0.05.
Описание типов, констант и переменных:
type   InputNeiron =recopd // Тип — нейрон первого слоя
                    w: array[1..n] of real; // Весовые коэффициенты входов
                    Output: real; // Выход
                    end;
        Neiron= recopd // Тип — нейрон второго слоя
                Output:real; // Выход