3. Методика и результаты экспериментальных исследований.
Проблема функции ИСКЛЮЧАЮЩЕЕ ИЛИ.
Как было сказано, один из самых пессимистических результатов Минского показывает, что однослойный персептрон не может воспроизвести такую простую функцию как ИСКЛЮЧАЮЩЕЕ ИЛИ.
Для того, чтобы проиллюстрировать эту проблему, персептрону предоставляли четыре обучающих пары. К одному классу образов относили, подаваемое на измерительную сетчатку 5х7, шахматное поле и такое же поле, но с инвертируемым цветом. К другому классу - буквенные символы E и F (см. Рис.1 Приложение1.). В результате распознавания персептрон классифицировал первый из указанных образов как относящийся к первому классу, а второй, третий и четвертый - ко второму. Т. е. персептрон ошибся на втором образе.
Эти же обучающие пары предоставили для обучения и распознавания модели двухслойной сети. В результате сеть все образы классифицировала правильно. Эти результаты согласуются с теорией представляемости персептрона и двухслойных сетей.
Исследование представляемости однослойной и двухслойной нейронной сети.
Исследование представляемости однослойной и двухслойной нейронных сетей производились на соответствующих моделях.
Результаты эксперимента с моделью персептрона показали, что персептрон способен моделировать функцию, разделяющую изображения цифр 1, 2, 3, 4, 5, 6, 7, 8 и 9, подаваемых на сетчатку, на два класса - четные и нечетные (см. Рис. 2. Приложение1.). Величина допустимой ошибки сети была равна 0.001.
Следующий эксперимент был поставлен для выяснения способности персептрона и двухслойной сети обратного распространения классифицировать буквенно-цифровые изображения (десять цифр и двадцать шесть букв латинского алфавита) на два класса - цифры и буквы (см. Рис. 3. Приложение1.). При уровне допустимой ошибки 0.001 персептрон путал классами цифры 1, 3, 7 и букву А. Сеть обратного распространения при том же уровне допустимой ошибки 0.001 путала классами цифры 3, 4, 5 и буквы S, I. Далее величина ошибки уменьшалась на порядок. Персептрон путал класс цифры 1, сеть обратного распространения - классами цифру 3 и буквы S, I. При уровне допустимой ошибки 0.00001 персептрон путал классами цифру 1 . Сеть обратного распространения при том же уровне допустимой ошибки 0.00001 путала класс буквы S. При уровне допустимой ошибки 0.000001 и персептрон, и сеть обратного распространения ошибок в классификации не допускали.
Релаксация стимула.
Как говорилось состояние сети Хопфилда описывается множеством текущих значений сигналов от всех нейронов, причем на каждом шаге алгоритма меняется состояние лишь одного нейрона, номер которого выбирается случайным образом. Он суммирует с весами Wij сигналы, поступающие от выходов нейронов сети по обратным связям и изменяет свое состояние в соответствии со значением пороговой функции. Пример последовательности состояний, которые проходит система нейронов при распознавании образов в модели Хопфилда, приведен на рис. 4. Приложение1, где показаны промежуточные состояния. Левая картинка представляет собой исходный стимул, а крайняя правая - образ, записанный в памяти системы. При такой релаксации энергия системы уменьшается, достигая с течением времени одного из локальных минимумов.
Возникновение ложного образа. Выработка прототипа.
Устойчивыми состояниями сети Хопфилда могут быть также образы, не записанные ее память - ложные образы. На Рис. 5. Приложение1. показан пример устойчивого ложного образа (d), возникающий при распознавании стимулов сетью, в матрице связей которой записаны образы a, b, c.
При увеличении числа образов, записываемых в память системы, отвечающие им минимумы энергии могут сливаться. На рис. 6. Приложение1. показана группа образов (получающихся при небольших искажениях), записанные в память сети - a, b, c. При предъявлении сети этих образов для распознавания, сеть приходит к состоянию, соответствующего выработанному прототипу - d.
Модель демонстрирует процедуру разобучения, предназначенную для устранения из памяти ложных образов. Разобучение состоит в предъявлении сети образа, к которому релаксировал стимул. При этом из матрицы связи вычитается тот член, который при обучении бы прибавлялся. В применении к случаю прототипа с тремя записанными в памяти образами (см. Рис. 6. Приложение1.), разобучение приводит к исчезновению прототипа и к появлению вместо одной потенциальной ямы, соответствующей прототипу, трех потенциальных ям, соответствующих каждому образу, записанному в памяти сети.
Бистабильность восприятия.
Эксперименты с моделью сети Хопфилда показали (см. Рис. 7. Приложение1.), что средние стимулы последовательности могут восприниматься либо как искаженный левый, либо как искаженный правый образы, т. е. имеет место бистабильность восприятия. Смена устойчивого состояния происходит после предъявления четвертой картинки.
Заключение.
В работе созданы программные модели трех нейронных сетей: персептрон, сеть обратного распросранения и сеть Хопфилда. Модели позволяют проиллюстрироваь основные достоинства и недостатки, а также ряд специфических свойств реализованных моделей.
Во всех моделях для приложения внешнего стимула использовалась, специально разработанная программно, измерительная сетчатка.
Результаты серии экспериментов, проведенных на моделях, показали, что:
Способность персептрона и сети обратного распространения моделировать определенную функцию зависит от допустимой общей ошибки сети.
Топологическая структура сети Хопфилда обуславливает ее свойства, которые можно интерпритировать как релаксация стимула, выработка прототипа, бистабильность восприятия.
В дальнейшем планируется разработка программных моделей более сложных нейронных сетей и их комбинаций с целью получения наиболее эффективных алгоритмов для задачи распознавания образов.
Литераура.
1.Горбань А.Н.,Россиев Д.А..Нейронные сети на персональном компьюере.
2. Минский М.Л.,Пайперт С..Персепроны.М.: Мир.1971
3. Розенблатт Ф.Принципы нейродинамики.М.: Мир.1965
4. Уоссермен Ф.Нейрокомпьютерная техника.М.: Мир.1992.237С
Cohen M.A.,Grossberg S.G.Absoiute stability of global pattern formation and parallel memory storage by compatitive neural networks.1983
Hebb D.O.Organization of behavior.New York:Science Edition
Hopfield J.J.Neural networks and physical systems with emergent collective computational abilities. Proseedings of the National Academy of Science 79.1982
Parker D.B. Learning-logic. Invention Report. 1982
Rumelhart D.E. Hinton G.E.,Williams R.J. Learning internal representations by error propagation. In Parallel distributed processing, vol.1986
Werbos P.G. Beyond regression: New tools for prediction and analysis in the behavioral sciences. 1974
Wider R.O. Single-stage logic, Paper presented at the AIEE Fall General Meeting. 1960
Windrow B. The speed of adaptetion in adaptive control system. 1961
Windrow B. A statistical theory of adaptetion. Adaptive control systems. 1963
Windrow B., Angell J.B. Reliable, trainable networks for computing and control. 1962
Windrow B., Hoff N.E. Adaptive switching circuits. 1960
Приложение 1.
Рис. 1.
Рис. 2.
Рис. 3.
Рис. 3.
Рис. 4.
Рис. 5.
Рис. 6.
Рис. 7.
Приложение 2.
Программа, моделирующая однослойную сеть.
unit UPerc;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Percept_Field, StdCtrls, Buttons, ExtCtrls;
const InputLayerUnits=35;
OutputLayerUnits=2;
eta=0.05;
epsilon=0.000001;
numberpatterns=36;
type
TFrmPerceptron = class(TForm)
Percept_FieldPerc: TPercept_Field;
GroupBoxTrain: TGroupBox;
GroupBoxInit: TGroupBox;
ComboBoxABC: TComboBox;
ComboBoxDigits: TComboBox;
BtnNext: TButton;
BitBtnClose: TBitBtn;
EditNumPat: TEdit;
LabelNumPat: TLabel;
GroupBoxRec: TGroupBox;
LabelInput: TLabel;
BtnOutput: TButton;
LabelOdd: TLabel;
RadioGroupTarget: TRadioGroup;
RadioButtonOdd: TRadioButton;
RadioButtonEven: TRadioButton;
LabelOr: TLabel;
LabelEven: TLabel;
procedure ComboBoxABCChange(Sender: TObject);
procedure ComboBoxDigitsChange(Sender: TObject);
procedure Percept_FieldPercMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure BitBtnCloseClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtnNextClick(Sender: TObject);
procedure BtnOutputClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmPerceptron: TFrmPerceptron;
var
w:array[1..OutputLayerUnits,1..InputLayerUnits] of real;
indexBtnNextClick:byte;
activation:array[1..OutputLayerUnits] of real;
OutputLayerOutput:array[1..OutputLayerUnits] of shortint;
target:array[1..numberpatterns,1..OutputLayerUnits] of shortint;
v:array[1..numberpatterns,1..InputLayerUnits] of shortint;
implementation
{$R *.DFM}
procedure TFrmPerceptron.Percept_FieldPercMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var m,k:BYTE;
correctRect:shortint;
L,T,H,V:INTEGER;
begin
L:=0;
T:=0;
H:=Percept_FieldPerc.UnitHorizontal;
V:=Percept_FieldPerc.UnitVertical;
for m :=1 to Percept_FieldPerc.UnitRectVert do
begin
for k :=1 to Percept_FieldPerc.UnitRectHorz do
begin
if (XL) and (YT) then
begin
correctRect:=k+Percept_FieldPerc.UnitRectHorz*(m-1);
if (Button=mbLeft) and
(Percept_FieldPerc.Brushes[correctRect]=Percept_FieldPerc.BackGroundBrush) then
begin
Percept_FieldPerc.Brushes[correctRect]:=Percept_FieldPerc.RectBrush;
end
else
if (Button=mbRight) and
(Percept_FieldPerc.Brushes[correctRect]=Percept_FieldPerc.RectBrush)then
begin
Percept_FieldPerc.Brushes[correctRect]:=Percept_FieldPerc.BackGroundBrush;
end;
end;
inc(L,Percept_FieldPerc.UnitHorizontal);
inc(H,Percept_FieldPerc.UnitHorizontal);
end;
inc(T,Percept_FieldPerc.UnitVertical);
inc(V,Percept_FieldPerc.UnitVertical);
L:=0;
H:=Percept_FieldPerc.UnitHorizontal;
end;
end;
procedure TFrmPerceptron.BitBtnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TFrmPerceptron.FormCreate(Sender: TObject);
var i,j:byte;
rand:real;
begin
//numberpatterns:=2;//10;
EditNumPat.Text:=inttostr(numberpatterns);
BtnNext.Font.Color:=clRed;
indexBtnNextClick:=0;
LabelInput.Visible:=False;
// *********************************************
Randomize;// случайные веса (-0.5,0.5)
for i := 1 to OutputLayerUnits do
begin
for j := 1 to InputLayerUnits do
begin
rand:=Random-0.5;
w[i,j]:=rand;
end;
end;
end;
procedure TFrmPerceptron.BtnNextClick(Sender: TObject);
var i,j,m:byte;
sum:real;
neterror,err:real;
error:array[1..OutputLayerUnits] of real;
stop:boolean;
krandom:integer;
begin
indexBtnNextClick:=indexBtnNextClick+1;
for m:=1 to InputLayerUnits do begin
if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.RectBrush) then
begin
v[indexBtnNextClick,m]:=1;
end
else
if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.BackGroundBrush) then
begin
v[indexBtnNextClick,m]:=-1;
end;
end;
// ******************ODD or EVEN*********************
if RadioButtonOdd.Checked then
begin
target[indexBtnNextClick,1]:=1;
target[indexBtnNextClick,2]:=-1;
end
else
if RadioButtonEven.Checked then
begin
target[indexBtnNextClick,1]:=-1;
target[indexBtnNextClick,2]:=1;
end;
// ***************************************************
if (indexBtnNextClick+1)=numberpatterns then
begin
BtnNext.Caption:='last';
end
else
begin
if (indexBtnNextClick)=numberpatterns then
begin
BtnNext.Font.Color:=clWindowText;
BtnNext.Caption:='finished';
LabelInput.Font.Color:=clRed;
LabelInput.Visible:=True;
end
else
begin
BtnNext.Caption:='next';
end;
end;
//*********************MAIN*******************************
if (indexBtnNextClick)=numberpatterns then
begin
repeat
stop:=false;
for m := 1 to numberpatterns do
begin
for i := 1 to OutputLayerUnits do
begin
sum:=0;
for j := 1 to InputLayerUnits do
begin
sum:=sum+w[i,j]*v[m,j];
end;
activation[i]:=sum;
if sum>=0 then
begin
OutputLayerOutput[i]:=1;
end
else
begin
OutputLayerOutput[i]:=-1;
end;
end;
neterror:=0;
for i := 1 to OutputLayerUnits do
begin
err:=target[m,i]-activation[i];
error[i]:=err;
neterror:=neterror+0.5*sqr(err);
end;
if neterror=0 then
begin
OutputLayerOutput[i]:=1;
end
else
begin
OutputLayerOutput[i]:=-1;
end;
end;
neterror:=0;
for i := 1 to OutputLayerUnits do
begin
err:=target[m,i]-activation[i];
error[i]:=err;
neterror:=neterror+0.5*sqr(err);
end;
for i := 1 to OutputLayerUnits do
begin
for j := 1 to InputLayerUnits do
begin
w[i,j]:=w[i,j]+eta*error[i]*v[m,j];
end;
end;
end;
end;//if
until stop;//end;
end; // if
end;
procedure TFrmPerceptron.BtnOutputClick(Sender: TObject);
var z:array[1..InputLayerUnits] of shortint;
m,i,j:byte;
Output:array[1..InputLayerUnits] of real;
sum:real;
begin
for m:=1 to InputLayerUnits do begin
if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.RectBrush) then
begin
z[m]:=1;
end
else
if (Percept_FieldPerc.Brushes[m]=Percept_FieldPerc.BackGroundBrush) then
begin
z[m]:=-1;
end;
end;
for i := 1 to OutputLayerUnits do
begin
sum:=0;
for j := 1 to InputLayerUnits do
begin
sum:=sum+w[i,j]*z[j];
end;
Output[i]:=sum;
end;
if (Output[1]>Output[2]) then
begin
LabelOdd.Font.Color:=clRed;
LabelEven.Font.Color:=clWindowText;
end
else begin
if (Output[2]>Output[1]) then
begin
LabelEven.Font.Color:=clRed;
LabelOdd.Font.Color:=clWindowText;
end;
end;
end;
end.
Программа, моделирующая сеть обратного распространения
unit UBack;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Percept_Field, Buttons, ExtCtrls;
const FirstLayerUnits=35;
SecondLayerUnits=20;
ThirdLayerUnits=2;
numberpatterns=36;
NumLayers=3;
epsilon=0.000001;
eta=0.05;
alpha=0.5;
type
TFrmBack = class(TForm)
BitBtnClose: TBitBtn;
Percept_FieldBack: TPercept_Field;
GroupBoxTrain: TGroupBox;
ComboBoxABC: TComboBox;
ComboBoxDigits: TComboBox;
GroupBoxInit: TGroupBox;
EditNumPat: TEdit;
LabelNumPat: TLabel;
BtnNext: TButton;
GroupBoxRec: TGroupBox;
LabelInput: TLabel;
RadioGroupTarget: TRadioGroup;
RadioButtonLetter: TRadioButton;
RadioButtonFigure: TRadioButton;
ButtonOut: TButton;
LabelFigure: TLabel;
LabelOr: TLabel;
LabelLetter: TLabel;
procedure BitBtnCloseClick(Sender: TObject);
procedure ComboBoxABCChange(Sender: TObject);
procedure ComboBoxDigitsChange(Sender: TObject);
procedure Percept_FieldBackMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
procedure BtnNextClick(Sender: TObject);
procedure ButtonOutClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmBack: TFrmBack;
var
wFirstSecond:array[1..SecondLayerUnits,1..FirstLayerUnits] of real;
wSecondThird:array[1..ThirdLayerUnits,1..SecondLayerUnits] of real;
indexBtnNextClick:byte;
target:array[1..numberpatterns,1..ThirdLayerUnits] of real;
v:array[1..numberpatterns,1..FirstLayerUnits] of real;
implementation
{$R *.DFM}
procedure TFrmBack.BitBtnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TFrmBack.Percept_FieldBackMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var m,k:BYTE;
correctRect:shortint;
L,T,H,V:INTEGER;
begin
L:=0;
T:=0;
H:=Percept_FieldBack.UnitHorizontal;
V:=Percept_FieldBack.UnitVertical;
for m :=1 to Percept_FieldBack.UnitRectVert do
begin
for k :=1 to Percept_FieldBack.UnitRectHorz do
begin
if (XL) and (YT) then
begin
correctRect:=k+Percept_FieldBack.UnitRectHorz*(m-1);
if (Button=mbLeft) and
(Percept_FieldBack.Brushes[correctRect]=Percept_FieldBack.BackGroundBrush) then
begin
Percept_FieldBack.Brushes[correctRect]:=Percept_FieldBack.RectBrush;
end
else
if (Button=mbRight) and
(Percept_FieldBack.Brushes[correctRect]=Percept_FieldBack.RectBrush)then
begin
Percept_FieldBack.Brushes[correctRect]:=Percept_FieldBack.BackGroundBrush;
end;
end;
inc(L,Percept_FieldBack.UnitHorizontal);
inc(H,Percept_FieldBack.UnitHorizontal);
end;
inc(T,Percept_FieldBack.UnitVertical);
inc(V,Percept_FieldBack.UnitVertical);
L:=0;
H:=Percept_FieldBack.UnitHorizontal;
end;
end;
procedure TFrmBack.FormCreate(Sender: TObject);
var i,j:byte;
rand:real;
begin
EditNumPat.Text:=inttostr(numberpatterns);
BtnNext.Font.Color:=clRed;
indexBtnNextClick:=0;
LabelInput.Visible:=False;
// *********************************************
Randomize;// случайные веса (-0.5,0.5)
for i := 1 to SecondLayerUnits do
begin
for j := 1 to FirstLayerUnits do
begin
rand:=Random-0.5;
wFirstSecond[i,j]:=rand;
end;
end;
for i := 1 to ThirdLayerUnits do
begin
for j := 1 to SecondLayerUnits do
begin
rand:=Random-0.5;
wSecondThird[i,j]:=rand;
end;
end;
end;
procedure TFrmBack.BtnNextClick(Sender: TObject);
var i,j,m:byte;
sumFirstSecond,
sumSecondThird:real;
stop:boolean;
OutputSecond:array[1..SecondLayerUnits] of real;
OutputThird:array[1..ThirdLayerUnits] of real;
output,err,neterror:real;
OutLayerError:array[1..ThirdLayerUnits] of real;
SecondLayerError:array[1..SecondLayerUnits] of real;
FirstLayerError:array[1..FirstLayerUnits] of real;
dWeightSecondThird:array[1..ThirdLayerUnits,1..SecondLayerUnits] of real;
dWeightFirstSecond:array[1..SecondLayerUnits,1..FirstLayerUnits] of real;
dWeight:real;
krandom:integer;
begin
indexBtnNextClick:=indexBtnNextClick+1;
for m:=1 to FirstLayerUnits do begin
if (Percept_FieldBack.Brushes[m]=Percept_FieldBack.RectBrush) then
begin
v[indexBtnNextClick,m]:=1;
end
else
if (Percept_FieldBack.Brushes[m]=Percept_FieldBack.BackGroundBrush) then
begin
v[indexBtnNextClick,m]:=-1;
end;
end;
// ******************ODD or EVEN*********************
if RadioButtonFigure.Checked then
begin
target[indexBtnNextClick,1]:=0.9;//1;
target[indexBtnNextClick,2]:=0.1;//-1;
end
else
if RadioButtonLetter.Checked then
begin
target[indexBtnNextClick,1]:=0.1;//-1;
target[indexBtnNextClick,2]:=0.9;//1;
end;
// ***************************************************
if (indexBtnNextClick+1)=numberpatterns then
begin
BtnNext.Caption:='last';
end
else
begin
if (indexBtnNextClick)=numberpatterns then
begin
BtnNext.Font.Color:=clWindowText;
BtnNext.Caption:='finished';
LabelInput.Font.Color:=clRed;
LabelInput.Visible:=True;
end
else
begin
BtnNext.Caption:='next';
end;
end;
//***********************MAIN**************************
if (indexBtnNextClick)=numberpatterns then
begin
repeat
stop:=false;
for m := 1 to numberpatterns do
begin
for i := 1 to SecondLayerUnits do
begin
sumFirstSecond:=0;
for j := 1 to FirstLayerUnits do
begin
sumFirstSecond:=sumFirstSecond+wFirstSecond[i,j]*v[m,j];
end;
OutputSecond[i]:=1/(1+exp(-sumFirstSecond));
end;
for i := 1 to ThirdLayerUnits do
begin
sumSecondThird:=0;
for j := 1 to SecondLayerUnits do
begin
sumSecondThird:=sumSecondThird+wSecondThird[i,j]*OutputSecond[j];
end;
OutputThird[i]:=1/(1+exp(-sumSecondThird));
end;
neterror:=0;
for i := 1 to ThirdLayerUnits do
begin
output:=OutputThird[i];
err:=target[m,i]-output;
OutLayerError[i]:=output*(1-output)*err;
neterror:=neterror+0.5*sqr(err);
end;
if neterrorOutputThird[2]) then
begin
LabelFigure.Font.Color:=clRed;
LabelLetter.Font.Color:=clWindowText;
end
else begin
if (OutputThird[2]>OutputThird[1]) then
begin
LabelLetter.Font.Color:=clRed;
LabelFigure.Font.Color:=clWindowText;
end;
end;
end;
end.
Программа, моделирующая сеть Хопфилда
unit UHop;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls, Buttons, Percept_Field;
const numberneurons=35;
type
TFrmHop = class(TForm)
BitBtnClose: TBitBtn;
GrpBoxTraining: TGroupBox;
GrpBoxInitial: TGroupBox;
EditThres: TEdit;
EditNumPat: TEdit;
LabelThres: TLabel;
LabelNumPat: TLabel;
BtnNext: TButton;
GrpBoxRec: TGroupBox;
LabelInput: TLabel;
BtnOutput: TButton;
BitBtnCancel: TBitBtn;
ButtonDelay: TButton;
ComboBoxABC: TComboBox;
ComboBoxDigits: TComboBox;
Percept_FieldHop: TPercept_Field;
ButtonRetrain: TButton;
procedure Percept_FieldHopMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure BitBtnCloseClick(Sender: TObject);
procedure EditNumPatChange(Sender: TObject);
procedure EditThresChange(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BtnNextClick(Sender: TObject);
procedure BtnOutputClick(Sender: TObject);
procedure BitBtnCancelClick(Sender: TObject);
procedure ButtonDelayClick(Sender: TObject);
procedure ComboBoxABCChange(Sender: TObject);
procedure ComboBoxDigitsChange(Sender: TObject);
procedure ButtonRetrainClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FrmHop: TFrmHop;
var numberpatterns,threshold:shortint;
w:array[1..numberneurons,1..numberneurons] of shortint;
iindex,jindex,indexBtnNextClick:byte;
stop:boolean;
implementation
{$R *.DFM}
procedure TFrmHop.Percept_FieldHopMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var m,k:BYTE;
correctRect:shortint;
L,T,H,V:INTEGER;
begin
L:=0;
T:=0;
H:=Percept_FieldHop.UnitHorizontal;
V:=Percept_FieldHop.UnitVertical;
for m :=1 to Percept_FieldHop.UnitRectVert do
begin
for k :=1 to Percept_FieldHop.UnitRectHorz do
begin
if (XL) and (YT) then
begin
correctRect:=k+Percept_FieldHop.UnitRectHorz*(m-1);
if (Button=mbLeft) and
(Percept_FieldHop.Brushes[correctRect]=Percept_FieldHop.BackGroundBrush) then
begin
Percept_FieldHop.Brushes[correctRect]:=Percept_FieldHop.RectBrush;
end
else
if (Button=mbRight) and
(Percept_FieldHop.Brushes[correctRect]=Percept_FieldHop.RectBrush)then
begin
Percept_FieldHop.Brushes[correctRect]:=Percept_FieldHop.BackGroundBrush;
end;
end;
inc(L,Percept_FieldHop.UnitHorizontal);
inc(H,Percept_FieldHop.UnitHorizontal);
end;
inc(T,Percept_FieldHop.UnitVertical);
inc(V,Percept_FieldHop.UnitVertical);
L:=0;
H:=Percept_FieldHop.UnitHorizontal;
end;
end;
procedure TFrmHop.BitBtnCloseClick(Sender: TObject);
begin
Close;
end;
procedure TFrmHop.EditThresChange(Sender: TObject);
begin
threshold:=strtoint(EditThres.Text);
end;
procedure TFrmHop.EditNumPatChange(Sender: TObject);
begin
numberpatterns:=strtoint(EditNumPat.Text);
end;
procedure TFrmHop.FormCreate(Sender: TObject);
var i,j:byte;
begin
threshold:=0;
EditThres.Text:=inttostr(threshold);
numberpatterns:=3;
EditNumPat.Text:=inttostr(numberpatterns);
BtnNext.Font.Color:=clRed;
for i:=1 to numberneurons do begin
for j:=1 to numberneurons do begin
w[i,j]:=0;
end;
end;
indexBtnNextClick:=0;
LabelInput.Visible:=False;
end;
procedure TFrmHop.BtnNextClick(Sender: TObject);
var i,j,m:byte;
v:array[1..numberneurons] of shortint;
begin
indexBtnNextClick:=indexBtnNextClick+1;
for m:=1 to numberneurons do begin
if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.RectBrush) then
begin
v[m]:=1;
end
else
if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.BackGroundBrush) then
begin
v[m]:=0;
end;
end;
for i:=1 to numberneurons-1 do begin
for j:=i+1 to numberneurons do begin
w[i,j]:=w[i,j]+(2*v[i]-1)*(2*v[j]-1);
w[j,i]:=w[i,j];
end;
end;
if (indexBtnNextClick+1)=numberpatterns then
begin
BtnNext.Caption:='last';
end
else
begin
if (indexBtnNextClick)=numberpatterns then
begin
BtnNext.Font.Color:=clWindowText;
BtnNext.Caption:='finished';
LabelInput.Font.Color:=clRed;
LabelInput.Visible:=True;
end
else
begin
BtnNext.Caption:='next';
end;
end;
end;
procedure TFrmHop.BtnOutputClick(Sender: TObject);
var i,j,m,indicator:byte;
y,z:array[1..numberneurons] of shortint;
wij,wijthres:shortint;
k:longint;
begin
for m:=1 to numberneurons do begin
if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.RectBrush) then
begin
z[m]:=1;
end
else
if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.BackGroundBrush) then
begin
z[m]:=0;
end;
end;
for m := 1 to numberneurons do
begin
y[m]:=z[m];
end;
indicator:=0;
while indicator=0 do begin
for i:=1 to numberneurons do begin
wij:=0;
for j:=1 to numberneurons do begin
if ij then
wij:=wij+w[i,j]*z[j];
end;
wijthres:=wij-threshold;
if wijthres>=0 then
z[i]:=1
else
z[i]:=0;
end;
i:=1;
while inumberneurons;
end;
end;{while}
end;{while}
for m := 1 to numberneurons do
begin
if z[m]=1 then
begin
Percept_FieldHop.Brushes[m]:=Percept_FieldHop.RectBrush;
end
else
if z[m]=0 then
begin
Percept_FieldHop.Brushes[m]:=Percept_FieldHop.BackGroundBrush;
end;
stop:=false;
repeat
Application.ProcessMessages;
until stop;
end;
end;
procedure TFrmHop.BitBtnCancelClick(Sender: TObject);
var i,j:byte;
begin
BtnNext.Font.Color:=clRed;
for i:=1 to numberneurons do begin
for j:=1 to numberneurons do begin
w[i,j]:=0;
end;
end;
indexBtnNextClick:=0;
LabelInput.Visible:=False;
BtnNext.Caption:='first';
for i := 1 to numberneurons do
begin
Percept_FieldHop.Brushes[i]:=Percept_FieldHop.BackGroundBrush;
end;
end;
procedure TFrmHop.ButtonDelayClick(Sender: TObject);
begin
stop:=true;
end;
procedure TFrmHop.ButtonRetrainClick(Sender: TObject);
var i,j,m:byte;
v:array[1..numberneurons] of shortint;
begin
for m:=1 to numberneurons do begin
if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.RectBrush) then
begin
v[m]:=1;
end
else
if (Percept_FieldHop.Brushes[m]=Percept_FieldHop.BackGroundBrush) then
begin
v[m]:=0;
end;
end;
for i:=1 to numberneurons-1 do begin
for j:=i+1 to numberneurons do begin
w[i,j]:=w[i,j]-(2*v[i]-1)*(2*v[j]-1);
w[j,i]:=w[i,j];
end;
end;
end;
... МП к некритическому экстраполированию результата считается его слабостью. Сети РБФ более чувствительны к «проклятию размерности» и испытывают значительные трудности, когда число входов велико. 5. МОДЕЛИРОВАНИЕ НЕЙРОННЫХ СЕТЕЙ ДЛЯ ПРОГНОЗИРОВАНИЯ СТОИМОСТИ НЕДВИЖИМОСТИ 5.1 Особенности нейросетевого прогнозирования в задаче оценки стоимости недвижимости Использование нейронных сетей можно ...
... и необходимостью специальной подготовки потенциальных пользователей для оптимальной организации адаптивного процесса. В то же время широкое распространение могут получить обученные аналоговые нейрокомпьютеры (нейросети) с фиксированной или незначительно подстраиваемой структурой связей – нейропроцессоры. Задача создания нейропроцессоров сводится к обучению цифровой нейросетевой модели нужному ...
... экспертных систем (А. Батуро), а также лекции проф. А.Н. Горбаня по нейронным сетям. Приложение 1. Плакаты для защиты диплома. ТЕХНОЛОГИЯ ИЗВЛЕЧЕНИЯ ЗНАНИЙ ИЗ НЕЙРОННЫХ СЕТЕЙ: ¨ АПРОБАЦИЯ, ¨ ПРОЕКТИРОВАНИЕ ПО, ¨ ИСПОЛЬЗОВАНИЕ В ПСИХОЛИНГВИСТИКЕ ЦЕЛЬ РАБОТЫ ¨ апробация гибкой технологии извлечения ...
... является важнейшим слагаемым политической стабильности»). Именно нейросетевая технология производства знаний, по-моему, является «точкой роста», которая по-новому развернет нейроинформатику, преобразует многие разделы информатики и создаст новые. Примеры приложений Насколько мы можем судить по открытой печати, приложения нейронных сетей распределены примерно следующим образом: более 60% ...
0 комментариев