home *** CD-ROM | disk | FTP | other *** search
- {**********************************************}
- { TeeChart }
- { Neural Net Example }
- { Copyright (c) 1995-1996 by David Berneda }
- {**********************************************}
- unit Neudemo;
-
- interface
-
- uses
- Wintypes,WinProcs, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
- StdCtrls, Buttons, ExtCtrls, Teengine, Chart,Neural, Series, Curvfitt,USurfac,
- TeeProcs;
-
- type
- TNeuralExample = class(TForm)
- ErrorLine: TFastLineSeries;
- Panel1: TPanel;
- BitBtn1: TBitBtn;
- BitBtn2: TBitBtn;
- LearnedLine: TFastLineSeries;
- Panel2: TPanel;
- Chart1: TChart;
- Chart2: TChart;
- Panel3: TPanel;
- Chart3: TChart;
- Chart4: TChart;
- TargetLine: TFastLineSeries;
- BetaLine: TFastLineSeries;
- BitBtn5: TBitBtn;
- CBShowCurves: TCheckBox;
- { CurveFittingSeries1: TCurveFittingSeries;
- CurveFittingSeries2: TCurveFittingSeries;}
- Label1: TLabel;
- Panel4: TPanel;
- Label2: TLabel;
- Label3: TLabel;
- BitBtn3: TBitBtn;
- BitBtn4: TBitBtn;
- CBFlicker: TCheckBox;
- BitBtn6: TBitBtn;
- OpenDialog1: TOpenDialog;
- CurveFittingSeries1: TLineSeries;
- TeeFunction1: TCurveFittingFunction;
- CurveFittingSeries2: TLineSeries;
- TeeFunction2: TCurveFittingFunction;
- procedure FormCreate(Sender: TObject);
- procedure FormDestroy(Sender: TObject);
- procedure BitBtn1Click(Sender: TObject);
- procedure BitBtn2Click(Sender: TObject);
- procedure BitBtn4Click(Sender: TObject);
- procedure BitBtn5Click(Sender: TObject);
- procedure CBShowCurvesClick(Sender: TObject);
- procedure Chart1DblClick(Sender: TObject);
- procedure CBFlickerClick(Sender: TObject);
- procedure BitBtn6Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- Neural:TNeuralNet;
- Surface:TSurfaceWeights;
- procedure OnNeuralIteration(Sender:TNeuralNet; Var Action:TNeuralNetAction);
- procedure CreateSurface(Sender: TObject);
- procedure LoadNetwork(Const NetworkName:String);
- end;
-
- var
- NeuralExample: TNeuralExample;
-
- implementation
-
- {$R *.DFM}
- Uses EditChar,FLineEdi,CustEdit,UExplain;
-
- { This event is used to re-draw all charts while running the neural net }
- procedure TNeuralExample.OnNeuralIteration(Sender:TNeuralNet; Var Action:TNeuralNetAction);
- var t:Longint;
- Begin
- if (Sender.IterationCount mod 50)=0 then
- Begin
- ErrorLine.AddY(100.0*Sender.Output.FinalErr/Sender.Input.Size,'',clTeeColor);
- BetaLine.AddY(Neural.Beta,'',clTeeColor);
- LearnedLine.Clear;
- for t:=1 to Neural.Input.NumSamples do
- LearnedLine.AddY(Neural.CalcGuessedOutput(t),'',clTeeColor);
- LearnedLine.RefreshSeries;
- {$B-}
- if (Surface<>nil) and (Surface.Visible) then CreateSurface(Self);
- Application.ProcessMessages;
- end;
- End;
-
- procedure TNeuralExample.FormCreate(Sender: TObject);
- begin
- { warning if video don't supports true or high color }
- if not Chart1.IsScreenHighColor then
- ShowMessage('This demo looks much better with'+#13+
- '16k colors or greater.');
- TeeEraseBack:=False; { <-- to prevent flicker in Win95 + Plus ! }
- TeeDefaultCapacity:=2000; { <-- to speed things when adding points }
- Neural:=nil; { <-- set the neural network object to nil }
-
- { activate the charts background "gradient" if video mode of 16k colors }
- Chart1.Gradient.Visible:=Chart1.IsScreenHighColor;
- Chart4.Gradient.Visible:=Chart4.IsScreenHighColor;
-
- { Load sample values from disk }
- LoadNetwork('DEMO.NET');
- end;
-
- procedure TNeuralExample.LoadNetwork(Const NetworkName:String);
- var t,tt:Longint;
- tmpSeries:TFastLineSeries;
- begin
- if Neural<>nil then Neural.Free;
-
- Neural:=TNeuralNet.Create(Self);
- Neural.OnIteration:=OnNeuralIteration;
- try
- Neural.ReadDataFile(NetworkName);
- except
- on E:Exception do
- begin
- ShowMessage(NetworkName+ ' can not be found.'+#13+
- 'Please check working directory.'+#13+
- 'Error:'+E.Message);
- end;
- end;
-
-
- With Chart3 do
- While SeriesCount>0 do Series[0].Free;
-
- for t:=1 to Neural.Input.Size do
- begin
- tmpSeries:=TFastLineSeries.Create(Self);
- tmpSeries.Title:='Input #'+IntToStr(t);
- tmpSeries.XValues.DateTime:=False;
- tmpSeries.ParentChart:=Chart3;
- With Neural.Input do
- for tt:=1 to NumSamples do
- tmpSeries.AddY( Samples.Sample[tt,t],'',clTeeColor );
- end;
-
- ErrorLine.Clear;
- BetaLine.Clear;
- LearnedLine.Clear;
- CurveFittingSeries1.Clear;
- CurveFittingSeries2.Clear;
- TargetLine.Clear;
- for t:=1 to Neural.Input.NumSamples do
- TargetLine.AddY( Neural.Output.Samples.GetData(t,1),'',clTeeColor);
- end;
-
- procedure TNeuralExample.FormDestroy(Sender: TObject);
- begin
- if Neural<>nil then Neural.Free;
- end;
-
- procedure TNeuralExample.BitBtn1Click(Sender: TObject);
- begin
- ErrorLine.Clear;
- BetaLine.Clear;
- LearnedLine.Clear;
-
- BitBtn1.Enabled:=False;
- BitBtn2.Enabled:=True;
- BitBtn3.Enabled:=False;
- BitBtn6.Enabled:=False;
- BitBtn2.SetFocus;
- if Neural<>nil then Neural.StartLearning;
- end;
-
- procedure TNeuralExample.BitBtn2Click(Sender: TObject);
- begin
- if Neural<>nil then Neural.Learned:=True;
- BitBtn1.Enabled:=True;
- BitBtn2.Enabled:=False;
- BitBtn3.Enabled:=True;
- BitBtn6.Enabled:=True;
- BitBtn1.SetFocus;
- end;
-
- procedure TNeuralExample.CreateSurface(Sender: TObject);
- var x,z:Longint;
- begin
- if Neural<>nil then
- if Surface<>nil then
- With Surface.SurfaceSeries1 do
- begin
- Clear;
- NumXValues:=Neural.Medium.Size;
- NumZValues:=Neural.Input.Size;
- for x:=1 to NumXValues do
- for z:=1 to NumZValues do
- AddXYZ( x,
- Neural.Medium.Weights.Weight[x,z],
- z,
- '',
- clTeeColor);
-
- end;
- end;
-
- procedure TNeuralExample.BitBtn4Click(Sender: TObject);
- begin
- if Surface=nil then
- begin
- Surface:=TSurfaceWeights.Create(Self);
- CreateSurface(Self);
- end;
- Surface.Show;
- end;
-
- procedure TNeuralExample.BitBtn5Click(Sender: TObject);
- begin
- With TExplain.Create(Self) do
- try
- ShowModal;
- finally
- Free;
- end;
- end;
-
- procedure TNeuralExample.CBShowCurvesClick(Sender: TObject);
- begin
- if CBShowCurves.Checked then
- begin
- CurveFittingSeries1.Active:=True;
- CurveFittingSeries2.Active:=True;
- CurveFittingSeries1.DataSource:=LearnedLine;
- CurveFittingSeries2.DataSource:=TargetLine;
- end
- else
- begin
- CurveFittingSeries1.DataSource:=nil;
- CurveFittingSeries2.DataSource:=nil;
- CurveFittingSeries1.Active:=False;
- CurveFittingSeries2.Active:=False;
- end;
- end;
-
- procedure TNeuralExample.Chart1DblClick(Sender: TObject);
- begin
- EditChart(Self,Sender as TChart);
- { WARNING: Turn off "Break On Exception" option to not
- stop the application when double clicking charts }
- Abort; { <-- very important !!! }
- end;
-
- procedure TNeuralExample.CBFlickerClick(Sender: TObject);
- begin
- Chart1.BufferedDisplay:=not CBFlicker.Checked;
- Chart2.BufferedDisplay:=not CBFlicker.Checked;
- Chart3.BufferedDisplay:=not CBFlicker.Checked;
- Chart4.BufferedDisplay:=not CBFlicker.Checked;
- end;
-
- procedure TNeuralExample.BitBtn6Click(Sender: TObject);
- begin
- if OpenDialog1.Execute then
- LoadNetwork(OpenDialog1.FileName);
- end;
-
- end.
-