29void MakeImagesTree(
int n,
int nh,
int nw)
33 const int ntot = nh * nw;
35 TFile f(fileOutName,
"RECREATE");
37 const int nRndmEvts = 10000;
38 double delta_sigma = 0.1;
39 double pixelNoise = 5;
43 double sX2 = sX1 + delta_sigma;
44 double sY2 = sY1 - delta_sigma;
46 TH2D h1(
"h1",
"h1", nh, 0, 10, nw, 0, 10);
47 TH2D h2(
"h2",
"h2", nh, 0, 10, nw, 0, 10);
49 TF2 f1(
"f1",
"xygaus");
50 TF2 f2(
"f2",
"xygaus");
52 TTree sgn(
"sig_tree",
"signal_tree");
53 TTree bkg(
"bkg_tree",
"background_tree");
56 std::vector<float>
x1(ntot);
57 std::vector<float>
x2(ntot);
62 std::vector<float> *px1 = &
x1;
63 std::vector<float> *px2 = &
x2;
65 bkg.Branch(
"vars",
"std::vector<float>", &px1);
66 sgn.Branch(
"vars",
"std::vector<float>", &px2);
74 f2.SetParameters(1, 5, sX2, 5, sY2);
76 std::cout <<
"Filling ROOT tree " << std::endl;
77 for (
int i = 0; i <
n; ++i) {
79 std::cout <<
"Generating image event ... " << i << std::endl;
89 h2.FillRandom(
"f2", nRndmEvts);
91 for (
int k = 0; k < nh; ++k) {
92 for (
int l = 0;
l < nw; ++
l) {
105 Info(
"MakeImagesTree",
"Signal and background tree with images data written to the file %s",
f.GetName());
120void TMVA_CNN_Classification(
int nevts = 1000, std::vector<bool> opt = {1, 1, 1, 1, 1})
123 int imgSize = 16 * 16;
124 TString inputFileName =
"images_data_16x16.root";
130 MakeImagesTree(nevts, 16, 16);
133 bool useTMVACNN = (opt.size() > 0) ? opt[0] : false;
134 bool useTMVADNN = (opt.size() > 2) ? opt[2] : false;
135 bool useTMVABDT = (opt.size() > 3) ? opt[3] : false;
136#ifndef R__HAS_TMVACPU
137#ifndef R__HAS_TMVAGPU
138 Warning(
"TMVA_CNN_Classification",
139 "TMVA is not build with GPU or CPU multi-thread support. Cannot use TMVA Deep Learning for CNN");
144 bool writeOutputFile =
true;
152 if (num_threads >= 0) {
162 TFile *outputFile =
nullptr;
164 outputFile =
TFile::Open(
"TMVA_CNN_ClassificationOutput.root",
"RECREATE");
189 "TMVA_CNN_Classification", outputFile,
190 "!V:ROC:!Silent:Color:AnalysisType=Classification:Transformations=None:!Correlations");
215 std::unique_ptr<TFile> inputFile{
TFile::Open(inputFileName)};
217 Error(
"TMVA_CNN_Classification",
"Error opening input file %s - exit", inputFileName.
Data());
223 auto signalTree = inputFile->Get<
TTree>(
"sig_tree");
224 auto backgroundTree = inputFile->Get<
TTree>(
"bkg_tree");
227 Error(
"TMVA_CNN_Classification",
"Could not find signal tree in file '%s'", inputFileName.
Data());
230 if (!backgroundTree) {
231 Error(
"TMVA_CNN_Classification",
"Could not find background tree in file '%s'", inputFileName.
Data());
235 int nEventsSig = signalTree->GetEntries();
236 int nEventsBkg = backgroundTree->
GetEntries();
243 loader.AddSignalTree(signalTree, signalWeight);
244 loader.AddBackgroundTree(backgroundTree, backgroundWeight);
248 loader.AddVariablesArray(
"vars", imgSize);
267 int nTrainSig = 0.8 * nEventsSig;
268 int nTrainBkg = 0.8 * nEventsBkg;
272 "nTrain_Signal=%d:nTrain_Background=%d:SplitMode=Random:SplitSeed=100:NormMode=NumEvents:!V:!CalcCorrelations",
273 nTrainSig, nTrainBkg);
275 loader.PrepareTrainingAndTestTree(mycuts, mycutb, prepareOptions);
298 "!V:NTrees=200:MinNodeSize=2.5%:MaxDepth=2:BoostType=AdaBoost:AdaBoostBeta=0.5:"
299 "UseBaggedBoost:BaggedSampleFraction=0.5:SeparationType=GiniIndex:nCuts=20");
313 "Layout=DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,DENSE|1|LINEAR");
318 TString trainingString1(
"LearningRate=1e-3,Momentum=0.9,Repetitions=1,"
319 "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1,"
320 "MaxEpochs=10,WeightDecay=1e-4,Regularization=None,"
321 "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0.");
323 TString trainingStrategyString(
"TrainingStrategy=");
324 trainingStrategyString += trainingString1;
328 TString dnnOptions(
"!H:V:ErrorStrategy=CROSSENTROPY:VarTransform=None:"
329 "WeightInitialization=XAVIER");
330 dnnOptions.Append(
":");
331 dnnOptions.Append(layoutString);
332 dnnOptions.Append(
":");
333 dnnOptions.Append(trainingStrategyString);
335 TString dnnMethodName =
"TMVA_DNN_CPU";
338 dnnOptions +=
":Architecture=GPU";
339 dnnMethodName =
"TMVA_DNN_GPU";
340#elif defined(R__HAS_TMVACPU)
341 dnnOptions +=
":Architecture=CPU";
379 TString inputLayoutString(
"InputLayout=1|16|16");
382 TString layoutString(
"Layout=CONV|10|3|3|1|1|1|1|RELU,BNORM,CONV|10|3|3|1|1|1|1|RELU,MAXPOOL|2|2|1|1,"
383 "RESHAPE|FLAT,DENSE|100|RELU,DENSE|1|LINEAR");
386 TString trainingString1(
"LearningRate=1e-3,Momentum=0.9,Repetitions=1,"
387 "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1,"
388 "MaxEpochs=10,WeightDecay=1e-4,Regularization=None,"
389 "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0.0");
391 TString trainingStrategyString(
"TrainingStrategy=");
392 trainingStrategyString +=
396 TString cnnOptions(
"!H:V:ErrorStrategy=CROSSENTROPY:VarTransform=None:"
397 "WeightInitialization=XAVIER");
399 cnnOptions.Append(
":");
400 cnnOptions.Append(inputLayoutString);
401 cnnOptions.Append(
":");
402 cnnOptions.Append(layoutString);
403 cnnOptions.Append(
":");
404 cnnOptions.Append(trainingStrategyString);
407 TString cnnMethodName =
"TMVA_CNN_CPU";
410 cnnOptions +=
":Architecture=GPU";
411 cnnMethodName =
"TMVA_CNN_GPU";
413 cnnOptions +=
":Architecture=CPU";
414 cnnMethodName =
"TMVA_CNN_CPU";
427 factory.TrainAllMethods();
431 factory.TestAllMethods();
433 factory.EvaluateAllMethods();
437 auto c1 = factory.GetROCCurve(&loader);
double Double_t
Double 8 bytes.
void Info(const char *location, const char *msgfmt,...)
Use this function for informational messages.
void Error(const char *location, const char *msgfmt,...)
Use this function in case an error occurred.
void Warning(const char *location, const char *msgfmt,...)
Use this function in warning situations.
Option_t Option_t TPoint TPoint const char x2
Option_t Option_t TPoint TPoint const char x1
R__EXTERN TRandom * gRandom
R__EXTERN TSystem * gSystem
A specialized string object used for TTree selections.
virtual void SetParameters(const Double_t *params)
virtual void SetParameter(Int_t param, Double_t value)
A 2-Dim function with parameters.
A file, usually with extension .root, that stores data and code in the form of serialized objects in ...
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
void Close(Option_t *option="") override
Close a file.
void Reset(Option_t *option="") override
Reset.
virtual void FillRandom(TF1 *f1, Int_t ntimes=5000, TRandom *rng=nullptr)
virtual Double_t GetBinContent(Int_t bin) const
Return content of bin number bin.
2-D histogram with a double per channel (see TH1 documentation)
This is the main MVA steering class.
virtual Double_t Gaus(Double_t mean=0, Double_t sigma=1)
Samples a random number from the standard Normal (Gaussian) Distribution with the given mean and sigm...
virtual void SetSeed(ULong_t seed=0)
Set the random generator seed.
virtual Double_t Uniform(Double_t x1=1)
Returns a uniform deviate on the interval (0, x1).
const char * Data() const
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString.
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
virtual void Setenv(const char *name, const char *value)
Set environment variable.
A TTree represents a columnar dataset.
virtual Long64_t GetEntries() const
void EnableImplicitMT(UInt_t numthreads=0)
Enable ROOT's implicit multi-threading for all objects and methods that provide an internal paralleli...
UInt_t GetThreadPoolSize()
Returns the size of ROOT's thread pool.