ВУЗ:
Составители:
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
Страницы
- « первая
- ‹ предыдущая
- …
- 57
- 58
- 59
- 60
- 61
- …
- следующая ›
- последняя »
