-
Notifications
You must be signed in to change notification settings - Fork 202
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
eb602cc
commit 3f88d83
Showing
2 changed files
with
280 additions
and
0 deletions.
There are no files selected for viewing
174 changes: 174 additions & 0 deletions
174
examples/SimpleImageClassifier/SimpleImageClassifierPaddingCroppingSwish.lpi
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
<?xml version="1.0" encoding="UTF-8"?> | ||
<CONFIG> | ||
<ProjectOptions> | ||
<Version Value="11"/> | ||
<PathDelim Value="\"/> | ||
<General> | ||
<Flags> | ||
<MainUnitHasCreateFormStatements Value="False"/> | ||
</Flags> | ||
<SessionStorage Value="InProjectDir"/> | ||
<MainUnit Value="0"/> | ||
<Title Value="CIFAR-10 Classification Example"/> | ||
<UseAppBundle Value="False"/> | ||
<ResourceType Value="res"/> | ||
</General> | ||
<i18n> | ||
<EnableI18N LFM="False"/> | ||
</i18n> | ||
<BuildModes Count="3"> | ||
<Item1 Name="Default" Default="True"/> | ||
<Item2 Name="Debug"> | ||
<CompilerOptions> | ||
<Version Value="11"/> | ||
<PathDelim Value="\"/> | ||
<Target> | ||
<Filename Value="..\..\bin\$(TargetCPU)-$(TargetOS)\bin\SimpleImageClassifierPaddingCroppingSwish"/> | ||
</Target> | ||
<SearchPaths> | ||
<IncludeFiles Value="..\..\neural;$(ProjOutDir)"/> | ||
<OtherUnitFiles Value="..\..\neural;$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS);$(LazarusDir)\components\lazutils\lib\$(TargetCPU)-$(TargetOS)"/> | ||
<UnitOutputDirectory Value="..\..\bin\$(TargetCPU)-$(TargetOS)\units"/> | ||
</SearchPaths> | ||
<Parsing> | ||
<SyntaxOptions> | ||
<IncludeAssertionCode Value="True"/> | ||
</SyntaxOptions> | ||
</Parsing> | ||
<CodeGeneration> | ||
<Checks> | ||
<IOChecks Value="True"/> | ||
<RangeChecks Value="True"/> | ||
<OverflowChecks Value="True"/> | ||
<StackChecks Value="True"/> | ||
</Checks> | ||
<VerifyObjMethodCallValidity Value="True"/> | ||
</CodeGeneration> | ||
<Linking> | ||
<Debugging> | ||
<DebugInfoType Value="dsDwarf2Set"/> | ||
<UseValgrind Value="True"/> | ||
<UseExternalDbgSyms Value="True"/> | ||
</Debugging> | ||
</Linking> | ||
<Other> | ||
<CustomOptions Value="-dDebug | ||
-dAVX"/> | ||
<OtherDefines Count="3"> | ||
<Define0 Value="Debug"/> | ||
<Define1 Value="AVX"/> | ||
<Define2 Value="MakeQuick"/> | ||
</OtherDefines> | ||
</Other> | ||
</CompilerOptions> | ||
</Item2> | ||
<Item3 Name="Release"> | ||
<CompilerOptions> | ||
<Version Value="11"/> | ||
<PathDelim Value="\"/> | ||
<Target> | ||
<Filename Value="..\..\bin\$(TargetCPU)-$(TargetOS)\bin\SimpleImageClassifierPaddingCroppingSwish"/> | ||
</Target> | ||
<SearchPaths> | ||
<IncludeFiles Value="..\..\neural;$(ProjOutDir)"/> | ||
<OtherUnitFiles Value="..\..\neural;$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS);$(LazarusDir)\components\lazutils\lib\$(TargetCPU)-$(TargetOS)"/> | ||
<UnitOutputDirectory Value="..\..\bin\$(TargetCPU)-$(TargetOS)\units"/> | ||
</SearchPaths> | ||
<CodeGeneration> | ||
<SmartLinkUnit Value="True"/> | ||
<Optimizations> | ||
<OptimizationLevel Value="3"/> | ||
</Optimizations> | ||
</CodeGeneration> | ||
<Linking> | ||
<Debugging> | ||
<GenerateDebugInfo Value="False"/> | ||
</Debugging> | ||
<LinkSmart Value="True"/> | ||
</Linking> | ||
<Other> | ||
<CustomOptions Value="-dRelease | ||
-dAVX"/> | ||
<OtherDefines Count="5"> | ||
<Define0 Value="Release"/> | ||
<Define1 Value="Debug"/> | ||
<Define2 Value="CheckRange"/> | ||
<Define3 Value="AVX2"/> | ||
<Define4 Value="AVX"/> | ||
</OtherDefines> | ||
</Other> | ||
</CompilerOptions> | ||
</Item3> | ||
</BuildModes> | ||
<PublishOptions> | ||
<Version Value="2"/> | ||
</PublishOptions> | ||
<RunParams> | ||
<local> | ||
<CommandLineParams Value="-a 3"/> | ||
</local> | ||
<FormatVersion Value="2"/> | ||
<Modes Count="1"> | ||
<Mode0 Name="default"> | ||
<local> | ||
<CommandLineParams Value="-a 3"/> | ||
</local> | ||
</Mode0> | ||
</Modes> | ||
</RunParams> | ||
<RequiredPackages Count="1"> | ||
<Item1> | ||
<PackageName Value="multithreadprocslaz"/> | ||
</Item1> | ||
</RequiredPackages> | ||
<Units Count="1"> | ||
<Unit0> | ||
<Filename Value="SimpleImageClassifierPaddingCroppingSwish.lpr"/> | ||
<IsPartOfProject Value="True"/> | ||
</Unit0> | ||
</Units> | ||
</ProjectOptions> | ||
<CompilerOptions> | ||
<Version Value="11"/> | ||
<PathDelim Value="\"/> | ||
<Target> | ||
<Filename Value="..\..\bin\$(TargetCPU)-$(TargetOS)\bin\SimpleImageClassifierPaddingCroppingSwish"/> | ||
</Target> | ||
<SearchPaths> | ||
<IncludeFiles Value="..\..\neural;$(ProjOutDir)"/> | ||
<OtherUnitFiles Value="..\..\neural;$(LazarusDir)\lcl\units\$(TargetCPU)-$(TargetOS);$(LazarusDir)\components\lazutils\lib\$(TargetCPU)-$(TargetOS)"/> | ||
<UnitOutputDirectory Value="..\..\bin\$(TargetCPU)-$(TargetOS)\units"/> | ||
</SearchPaths> | ||
<CodeGeneration> | ||
<Optimizations> | ||
<OptimizationLevel Value="3"/> | ||
</Optimizations> | ||
</CodeGeneration> | ||
<Linking> | ||
<Debugging> | ||
<GenerateDebugInfo Value="False"/> | ||
</Debugging> | ||
</Linking> | ||
<Other> | ||
<CustomOptions Value="-dAVX | ||
-dRelease"/> | ||
<OtherDefines Count="2"> | ||
<Define0 Value="AVX"/> | ||
<Define1 Value="Release"/> | ||
</OtherDefines> | ||
</Other> | ||
</CompilerOptions> | ||
<Debugging> | ||
<Exceptions Count="3"> | ||
<Item1> | ||
<Name Value="EAbort"/> | ||
</Item1> | ||
<Item2> | ||
<Name Value="ECodetoolError"/> | ||
</Item2> | ||
<Item3> | ||
<Name Value="EFOpenError"/> | ||
</Item3> | ||
</Exceptions> | ||
</Debugging> | ||
</CONFIG> |
106 changes: 106 additions & 0 deletions
106
examples/SimpleImageClassifier/SimpleImageClassifierPaddingCroppingSwish.lpr
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
program SimpleImageClassifierPaddingCroppingSwish; | ||
(* | ||
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, neuralthread; | ||
|
||
type | ||
TTestCNNAlgo = class(TCustomApplication) | ||
protected | ||
procedure DoRun; override; | ||
end; | ||
|
||
const | ||
// Padding and cropping constants. | ||
csPadding = 4; | ||
csCropSize = csPadding * 2; | ||
|
||
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(32, 32, 3), | ||
TNNetConvolutionLinear.Create({Features=}64, {FeatureSize=}5, {Padding=}2, {Stride=}1, {SuppressBias=}1), | ||
TNNetMaxPool.Create(4), | ||
TNNetMovingStdNormalization.Create(), | ||
TNNetConvolutionLinear.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1), | ||
TNNetSwish.Create(), | ||
TNNetConvolutionLinear.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1), | ||
TNNetSwish.Create(), | ||
TNNetConvolutionLinear.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1), | ||
TNNetSwish.Create(), | ||
TNNetConvolutionLinear.Create({Features=}64, {FeatureSize=}3, {Padding=}1, {Stride=}1, {SuppressBias=}1), | ||
TNNetSwish.Create(), | ||
TNNetDropout.Create(0.5), | ||
TNNetMaxPool.Create(2), | ||
TNNetFullConnectLinear.Create(10), | ||
TNNetSoftMax.Create() | ||
]); | ||
NN.DebugStructure(); | ||
CreateCifar10Volumes(ImgTrainingVolumes, ImgValidationVolumes, ImgTestVolumes); | ||
|
||
// Add padding to dataset | ||
WriteLn | ||
( | ||
'Original image size: ', | ||
ImgTrainingVolumes[0].SizeX,',', | ||
ImgTrainingVolumes[0].SizeY,' px.' | ||
); | ||
ImgTrainingVolumes.AddPadding(csPadding); | ||
ImgValidationVolumes.AddPadding(csPadding); | ||
ImgTestVolumes.AddPadding(csPadding); | ||
WriteLn | ||
( | ||
'New image size after padding: ', | ||
ImgTrainingVolumes[0].SizeX,',', | ||
ImgTrainingVolumes[0].SizeY,' px.' | ||
); | ||
|
||
NeuralFit := TNeuralImageFit.Create; | ||
|
||
// Enable cropping while fitting. | ||
NeuralFit.HasImgCrop := true; | ||
NeuralFit.MaxCropSize := csCropSize; | ||
|
||
NeuralFit.FileNameBase := 'SimpleImageClassifierPaddingCroppingSwish-'+IntToStr(GetProcessId()); | ||
NeuralFit.InitialLearningRate := 0.001; | ||
NeuralFit.LearningRateDecay := 0.01; | ||
NeuralFit.StaircaseEpochs := 10; | ||
NeuralFit.Inertia := 0.9; | ||
NeuralFit.L2Decay := 0.00001; | ||
NeuralFit.MaxThreadNum := 1; | ||
|
||
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. |