39void MakeTimeData(
int n,
int ntime,
int ndim )
45 std::vector<TH1 *>
v1(ntime);
46 std::vector<TH1 *>
v2(ntime);
48 for (
int i = 0; i < ntime; ++i) {
53 auto f1 =
new TF1(
"f1",
"gaus");
54 auto f2 =
new TF1(
"f2",
"gaus");
56 TFile f(fname,
"RECREATE");
57 TTree sgn(
"sgn",
"sgn");
58 TTree bkg(
"bkg",
"bkg");
60 std::vector<std::vector<float>>
x1(ntime);
61 std::vector<std::vector<float>>
x2(ntime);
63 for (
int i = 0; i < ntime; ++i) {
64 x1[i] = std::vector<float>(ndim);
65 x2[i] = std::vector<float>(ndim);
68 for (
auto i = 0; i < ntime; i++) {
69 bkg.Branch(
Form(
"vars_time%d", i),
"std::vector<float>", &
x1[i]);
70 sgn.Branch(
Form(
"vars_time%d", i),
"std::vector<float>", &
x2[i]);
77 std::vector<double> mean1(ntime);
78 std::vector<double> mean2(ntime);
79 std::vector<double> sigma1(ntime);
80 std::vector<double> sigma2(ntime);
81 for (
int j = 0; j < ntime; ++j) {
82 mean1[j] = 5. + 0.2 *
sin(
TMath::Pi() * j /
double(ntime));
83 mean2[j] = 5. + 0.2 *
cos(
TMath::Pi() * j /
double(ntime));
84 sigma1[j] = 4 + 0.3 *
sin(
TMath::Pi() * j /
double(ntime));
85 sigma2[j] = 4 + 0.3 *
cos(
TMath::Pi() * j /
double(ntime));
87 for (
int i = 0; i <
n; ++i) {
90 std::cout <<
"Generating event ... " << i << std::endl;
92 for (
int j = 0; j < ntime; ++j) {
99 f2->SetParameters(1, mean2[j], sigma2[j]);
102 h2->FillRandom(
"f2", 1000);
104 for (
int k = 0; k < ndim; ++k) {
116 c1->Divide(ntime, 2);
117 for (
int j = 0; j < ntime; ++j) {
121 for (
int j = 0; j < ntime; ++j) {
122 c1->cd(ntime + j + 1);
144void TMVA_RNN_Classification(
int nevts = 2000,
int use_type = 1)
147 const int ninput = 30;
148 const int ntime = 10;
149 const int batchSize = 100;
150 const int maxepochs = 20;
152 int nTotEvts = nevts;
154 bool useTMVA_RNN =
true;
155 bool useTMVA_DNN =
true;
156 bool useTMVA_BDT =
false;
158 std::vector<std::string> rnn_types = {
"RNN",
"LSTM",
"GRU"};
159 std::vector<bool> use_rnn_type = {1, 1, 1};
160 if (use_type >=0 && use_type < 3) {
161 use_rnn_type = {0,0,0};
162 use_rnn_type[use_type] = 1;
166#ifndef R__HAS_TMVAGPU
168#ifndef R__HAS_TMVACPU
169 Warning(
"TMVA_RNN_Classification",
"TMVA is not build with GPU or CPU multi-thread support. Cannot use TMVA Deep Learning for RNN");
175 TString archString = (useGPU) ?
"GPU" :
"CPU";
177 bool writeOutputFile =
true;
181 const char *rnn_type =
"RNN";
189 if (num_threads >= 0) {
198 TString inputFileName =
"time_data_t10_d30.root";
204 MakeTimeData(nTotEvts,ntime, ninput);
210 Error(
"TMVA_RNN_Classification",
"Error opening input file %s - exit", inputFileName.
Data());
215 std::cout <<
"--- RNNClassification : Using input file: " << inputFile->GetName() << std::endl;
219 TFile *outputFile =
nullptr;
220 if (writeOutputFile) outputFile =
TFile::Open(outfileName,
"RECREATE");
245 "!V:!Silent:Color:DrawProgressBar:Transformations=None:!Correlations:"
246 "AnalysisType=Classification:ModelPersistence");
249 TTree *signalTree = (
TTree *)inputFile->Get(
"sgn");
250 TTree *background = (
TTree *)inputFile->Get(
"bkg");
252 const int nvar = ninput * ntime;
255 for (
auto i = 0; i < ntime; i++) {
265 std::cout <<
"number of variables is " << vars.size() << std::endl;
267 std::cout <<
v <<
",";
268 std::cout << std::endl;
270 int nTrainSig = 0.8 * nTotEvts;
271 int nTrainBkg = 0.8 * nTotEvts;
274 TString prepareOptions =
TString::Format(
"nTrain_Signal=%d:nTrain_Background=%d:SplitMode=Random:SplitSeed=100:NormMode=NumEvents:!V:!CalcCorrelations", nTrainSig, nTrainBkg);
282 std::cout <<
"prepared DATA LOADER " << std::endl;
293 for (
int i = 0; i < 3; ++i) {
295 if (!use_rnn_type[i])
298 const char *rnn_type = rnn_types[i].c_str();
312 TString layoutString =
TString(
"Layout=") + rnnLayout +
TString(
",RESHAPE|FLAT,DENSE|64|TANH,LINEAR");
316 "ConvergenceSteps=5,BatchSize=%d,TestRepetitions=1,"
317 "WeightDecay=1e-2,Regularization=None,MaxEpochs=%d,"
318 "Optimizer=ADAM,DropConfig=0.0+0.+0.+0.",
319 batchSize,maxepochs);
321 TString trainingStrategyString(
"TrainingStrategy=");
322 trainingStrategyString += trainingString1;
325 TString rnnOptions(
"!H:V:ErrorStrategy=CROSSENTROPY:VarTransform=None:"
326 "WeightInitialization=XAVIERUNIFORM:ValidationSize=0.2:RandomSeed=1234");
328 rnnOptions.Append(
":");
329 rnnOptions.Append(inputLayoutString);
330 rnnOptions.Append(
":");
331 rnnOptions.Append(layoutString);
332 rnnOptions.Append(
":");
333 rnnOptions.Append(trainingStrategyString);
334 rnnOptions.Append(
":");
352 TString layoutString(
"Layout=DENSE|64|TANH,DENSE|TANH|64,DENSE|TANH|64,LINEAR");
354 TString trainingString1(
"LearningRate=1e-3,Momentum=0.0,Repetitions=1,"
355 "ConvergenceSteps=10,BatchSize=256,TestRepetitions=1,"
356 "WeightDecay=1e-4,Regularization=None,MaxEpochs=20"
357 "DropConfig=0.0+0.+0.+0.,Optimizer=ADAM");
358 TString trainingStrategyString(
"TrainingStrategy=");
359 trainingStrategyString += trainingString1;
362 TString dnnOptions(
"!H:V:ErrorStrategy=CROSSENTROPY:VarTransform=None:"
363 "WeightInitialization=XAVIER:RandomSeed=0");
365 dnnOptions.Append(
":");
366 dnnOptions.Append(inputLayoutString);
367 dnnOptions.Append(
":");
368 dnnOptions.Append(layoutString);
369 dnnOptions.Append(
":");
370 dnnOptions.Append(trainingStrategyString);
371 dnnOptions.Append(
":");
372 dnnOptions.Append(archString);
387 "!H:!V:NTrees=100:MinNodeSize=2.5%:BoostType=Grad:Shrinkage=0.10:UseBaggedBoost:"
388 "BaggedSampleFraction=0.5:nCuts=20:"
410 if (outputFile) outputFile->
Close();
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
char * Form(const char *fmt,...)
Formats a string in a circular formatting buffer.
R__EXTERN TSystem * gSystem
A specialized string object used for TTree selections.
virtual void SetParameters(const Double_t *params)
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 Draw(Option_t *chopt="") override
Draw this graph with its current attributes.
1-D histogram with a double per channel (see TH1 documentation)
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.
static Config & Instance()
static function: returns TMVA instance
void AddVariablesArray(const TString &expression, int size, char type='F', Double_t min=0, Double_t max=0)
user inserts discriminating array of variables in data set info in case input tree provides an array ...
void AddSignalTree(TTree *signal, Double_t weight=1.0, Types::ETreeType treetype=Types::kMaxTreeType)
number of signal events (used to compute significance)
void PrepareTrainingAndTestTree(const TCut &cut, const TString &splitOpt)
prepare the training and test trees -> same cuts for signal and background
void AddBackgroundTree(TTree *background, Double_t weight=1.0, Types::ETreeType treetype=Types::kMaxTreeType)
number of signal events (used to compute significance)
DataSetInfo & GetDataSetInfo()
std::vector< TString > GetListOfVariables() const
returns list of variables
This is the main MVA steering class.
void TrainAllMethods()
Iterates through all booked methods and calls training.
void TestAllMethods()
Evaluates all booked methods on the testing data and adds the output to the Results in the corresponi...
void EvaluateAllMethods(void)
Iterates over all MVAs that have been booked, and calls their evaluation methods.
MethodBase * BookMethod(DataLoader *loader, MethodName theMethodName, TString methodTitle, TString theOption="")
Books an MVA classifier or regression method.
TGraph * GetROCCurve(DataLoader *loader, TString theMethodName, Bool_t setTitles=kTRUE, UInt_t iClass=0, Types::ETreeType type=Types::kTesting)
Argument iClass specifies the class to generate the ROC curve in a multiclass setting.
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.
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.
RVec< PromoteType< T > > cos(const RVec< T > &v)
RVec< PromoteType< T > > sin(const RVec< T > &v)
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.