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

UptoLike

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

59
Масштабирование позволяет существенно снизить время обучения
персептрона и приблизить точность распознавания к 100 %.
После нажатия кнопки «проверить» происходит формирование би-
нарного входного образа (1 – ячейка сетки закрашена, 0 – нет). В данном
случае удобнее рассматривать входной образ как матрицу размером 20 × 20.
При запуске программы идентичного размера весовая матрица инициали-
зируется случайными числами, равномерно распределенными в промежутке
[–0.3,0.3]. Так как вход и весовые коэффициенты известны, вычисляется
выход персептрона. Если получено выходное значение 1, считается, что
персептрон распознал крестик, в противном случаенолик. Результат рас-
познавания персептрона сообщается пользователю в отдельном диалого-
вом окне (см. рис. 25). Если результат неверный (пользователь нажал
«нет»), происходит обучение (коррекция весов) персептрона. Скорректи-
рованные
веса заносятся в файл, поэтому при следующем обращении к
программе можно не обучать персептрон заново, а использовать сохранен-
ную матрицу весов.
Текст программы с пояснениями приведен далее.
Описание типов, констант и переменных:
type
TMainForm = class(TForm)
DGImg: TDrawGrid;//сетка для рисования изображений крестиков и ноликов
BtnClear: TButton;// кнопкаочистить
BtnScale: TButton; // кнопкавыровнять
BtnInitRandom: TButton;//кнопкаслуч.веса
BtnCheck: TButton;//кнопкапроверить
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
BtnLoadWeights: TButton; //кнопказагрузить веса
BtnSaveWeights: TButton; //кнопкасохранить веса
SBStatus: TStatusBar;
procedure DGImgDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DGImgSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure BtnClearClick(Sender: TObject);
procedure BtnScaleClick(Sender: TObject);
procedure BtnInitRandomClick(Sender: TObject);
procedure BtnCheckClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
function SaveWeights(filename:string):boolean;
function LoadWeights(filename:string):boolean;
procedure BtnLoadWeightsClick(Sender: TObject);
procedure BtnSaveWeightsClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
bmatrix=array[0..n-1,0..n-1] of byte;
rmatrix=array[0..n-1,0..n-1] of real;
const n=20; // размер сетки рисунка
      Масштабирование позволяет существенно снизить время обучения
персептрона и приблизить точность распознавания к 100 %.
      После нажатия кнопки «проверить» происходит формирование би-
нарного входного образа (1 – ячейка сетки закрашена, 0 – нет). В данном
случае удобнее рассматривать входной образ как матрицу размером 20 × 20.
При запуске программы идентичного размера весовая матрица инициали-
зируется случайными числами, равномерно распределенными в промежутке
[–0.3,0.3]. Так как вход и весовые коэффициенты известны, вычисляется
выход персептрона. Если получено выходное значение 1, считается, что
персептрон распознал крестик, в противном случае – нолик. Результат рас-
познавания персептрона сообщается пользователю в отдельном диалого-
вом окне (см. рис. 25). Если результат неверный (пользователь нажал
«нет»), происходит обучение (коррекция весов) персептрона. Скорректи-
рованные веса заносятся в файл, поэтому при следующем обращении к
программе можно не обучать персептрон заново, а использовать сохранен-
ную матрицу весов.
      Текст программы с пояснениями приведен далее.
Описание типов, констант и переменных:
type
  TMainForm = class(TForm)
    DGImg: TDrawGrid;//сетка для рисования изображений крестиков и ноликов
    BtnClear: TButton;// кнопка “очистить”
    BtnScale: TButton; // кнопка “выровнять”
    BtnInitRandom: TButton;//кнопка “случ.веса”
    BtnCheck: TButton;//кнопка “проверить”
    OpenDialog: TOpenDialog;
    SaveDialog: TSaveDialog;
    BtnLoadWeights: TButton; //кнопка “загрузить веса”
    BtnSaveWeights: TButton; //кнопка “сохранить веса”
    SBStatus: TStatusBar;
    procedure DGImgDrawCell(Sender: TObject; ACol, ARow: Integer;
       Rect: TRect; State: TGridDrawState);
    procedure DGImgSelectCell(Sender: TObject; ACol, ARow: Integer;
       var CanSelect: Boolean);
    procedure BtnClearClick(Sender: TObject);
    procedure BtnScaleClick(Sender: TObject);
    procedure BtnInitRandomClick(Sender: TObject);
    procedure BtnCheckClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    function SaveWeights(filename:string):boolean;
    function LoadWeights(filename:string):boolean;
    procedure BtnLoadWeightsClick(Sender: TObject);
    procedure BtnSaveWeightsClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  bmatrix=array[0..n-1,0..n-1] of byte;
  rmatrix=array[0..n-1,0..n-1] of real;
const n=20; // размер сетки рисунка
                                    59