/
SimpleImageClassifierResize48.lpr
77 lines (71 loc) · 2.35 KB
/
SimpleImageClassifierResize48.lpr
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
program SimpleImageClassifierResize48;
(*
Coded by Joao Paulo Schwarz Schuler.
https://github.com/joaopauloschuler/neural-api
*)
{$mode objfpc}{$H+}
uses {$IFDEF UNIX} {$IFDEF UseCThreads}
cthreads, {$ENDIF} {$ENDIF}
Classes, SysUtils, CustApp, neuralnetwork, neuralvolume, Math, neuraldatasets, neuralfit;
type
TTestCNNAlgo = class(TCustomApplication)
protected
procedure DoRun; override;
end;
procedure TTestCNNAlgo.DoRun;
var
NN: TNNet;
NeuralFit: TNeuralImageFit;
ImgTrainingVolumes, ImgValidationVolumes, ImgTestVolumes: TNNetVolumeList;
begin
if not CheckCIFARFile() then
begin
Terminate;
exit;
end;
WriteLn('Creating Neural Network...');
NN := TNNet.Create();
NN.AddLayer([
TNNetInput.Create(48, 48, 3),
TNNetConvolutionLinear.Create(64, 5, 2, 1, 1),
TNNetMaxPool.Create(4),
TNNetMovingStdNormalization.Create(),
TNNetConvolutionReLU.Create(64, 3, 1, 1, 1),
TNNetConvolutionReLU.Create(64, 3, 1, 1, 1),
TNNetConvolutionReLU.Create(64, 3, 1, 1, 1),
TNNetConvolutionReLU.Create(64, 3, 1, 1, 1),
TNNetDropout.Create(0.5),
TNNetMaxPool.Create(2),
TNNetFullConnectLinear.Create(10),
TNNetSoftMax.Create({SkipBackpropDerivative=}1)
]);
NN.DebugStructure();
CreateCifar10Volumes(ImgTrainingVolumes, ImgValidationVolumes, ImgTestVolumes);
ImgTrainingVolumes.ResizeImage(48, 48);
ImgValidationVolumes.ResizeImage(48, 48);
ImgTestVolumes.ResizeImage(48, 48);
NeuralFit := TNeuralImageFit.Create;
NeuralFit.FileNameBase := 'SimpleImageClassifierResize48';
NeuralFit.InitialLearningRate := 0.001;
NeuralFit.LearningRateDecay := 0.01;
NeuralFit.StaircaseEpochs := 10;
NeuralFit.Inertia := 0.9;
NeuralFit.L2Decay := 0;
NeuralFit.MaxCropSize := 12;
//NeuralFit.MaxThreadNum := 8;
NeuralFit.Fit(NN, ImgTrainingVolumes, ImgValidationVolumes, ImgTestVolumes, {NumClasses=}10, {batchsize=}64, {epochs=}50);
NeuralFit.Free;
NN.Free;
ImgTestVolumes.Free;
ImgValidationVolumes.Free;
ImgTrainingVolumes.Free;
Terminate;
end;
var
Application: TTestCNNAlgo;
begin
Application := TTestCNNAlgo.Create(nil);
Application.Title:='CIFAR-10 Classification Example';
Application.Run;
Application.Free;
end.