ВУЗ:
Составители:
45
Масштабирование позволяет существенно снизить время обучения персеп -
трона и приблизить точность распознавания к 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; // размер сетки рисунка
var
MainForm: TMainForm;
imgmatrix:bmatrix;// входная ìàòðèöà, õðàíÿùàÿ "ðèñóíîê"
weights:rmatrix; // ìàòðèöà âåñîâ äëÿ îäíîãî íåéðîíà. äâóìåðíà ðàäè óäîáñòâà
speed:real=0.7; // коэфф. скорости обучения
45 Масштабирование позволяет существенно снизить время обучения персеп- трона и приблизить точность распознавания к 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; // размер сетки рисунка var MainForm: TMainForm; imgmatrix:bmatrix;// входная ìàòðèöà, õðàíÿùàÿ "ðèñóíîê" weights:rmatrix; // ìàòðèöà âåñîâ äëÿ îäíîãî íåéðîíà. äâóìåðíà ðàäè óäîáñòâà speed:real=0.7; // коэфф. скорости обучения
Страницы
- « первая
- ‹ предыдущая
- …
- 43
- 44
- 45
- 46
- 47
- …
- следующая ›
- последняя »