ВУЗ:
Составители:
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
- …
- следующая ›
- последняя »