29useTMVACNN = opt[0]
if len(opt) > 0
else False
30useKerasCNN = opt[1]
if len(opt) > 1
else False
31useTMVADNN = opt[2]
if len(opt) > 2
else False
32useTMVABDT = opt[3]
if len(opt) > 3
else False
33usePyTorchCNN = opt[4]
if len(opt) > 4
else False
35tf_spec = importlib.util.find_spec(
"tensorflow")
38 print(
"TMVA_CNN_Classificaton",
"Skip using Keras since tensorflow is not installed")
45torch_spec = importlib.util.find_spec(
"torch")
48 print(
"TMVA_CNN_Classificaton",
"Skip using PyTorch since torch is not installed")
62def MakeImagesTree(n, nh, nw):
65 fileOutName =
"images_data_16x16.root"
72 sX2 = sX1 + delta_sigma
73 sY2 = sY1 - delta_sigma
74 h1 = ROOT.TH2D(
"h1",
"h1", nh, 0, 10, nw, 0, 10)
75 h2 = ROOT.TH2D(
"h2",
"h2", nh, 0, 10, nw, 0, 10)
76 f1 = ROOT.TF2(
"f1",
"xygaus")
77 f2 = ROOT.TF2(
"f2",
"xygaus")
78 sgn = ROOT.TTree(
"sig_tree",
"signal_tree")
79 bkg = ROOT.TTree(
"bkg_tree",
"background_tree")
81 f =
TFile(fileOutName,
"RECREATE")
82 x1 = ROOT.std.vector[
"float"](ntot)
83 x2 = ROOT.std.vector[
"float"](ntot)
87 bkg.Branch(
"vars",
"std::vector<float>", x1)
88 sgn.Branch(
"vars",
"std::vector<float>", x2)
93 f1.SetParameters(1, 5, sX1, 5, sY1)
94 f2.SetParameters(1, 5, sX2, 5, sY2)
95 ROOT.gRandom.SetSeed(0)
96 ROOT.Info(
"TMVA_CNN_Classification",
"Filling ROOT tree \n")
99 print(
"Generating image event ...", i)
104 f1.SetParameter(1, ROOT.gRandom.Uniform(3, 7))
105 f1.SetParameter(3, ROOT.gRandom.Uniform(3, 7))
106 f2.SetParameter(1, ROOT.gRandom.Uniform(3, 7))
107 f2.SetParameter(3, ROOT.gRandom.Uniform(3, 7))
109 h1.FillRandom(
"f1", nRndmEvts)
110 h2.FillRandom(
"f2", nRndmEvts)
116 x1[m] = h1.GetBinContent(k + 1, l + 1) + ROOT.gRandom.Gaus(0, pixelNoise)
117 x2[m] = h2.GetBinContent(k + 1, l + 1) + ROOT.gRandom.Gaus(0, pixelNoise)
125 print(
"Signal and background tree with images data written to the file %s", f.GetName())
130hasGPU =
"tmva-gpu" in ROOT.gROOT.GetConfigFeatures()
131hasCPU =
"tmva-cpu" in ROOT.gROOT.GetConfigFeatures()
135if (
not hasCPU
and not hasGPU) :
136 ROOT.Warning(
"TMVA_CNN_Classificaton",
"ROOT is not supporting tmva-cpu and tmva-gpu skip using TMVA-DNN and TMVA-CNN")
140if not "tmva-pymva" in ROOT.gROOT.GetConfigFeatures():
142 usePyTorchCNN =
False
148 "TMVA_CNN_Classificaton",
149 "TMVA is not build with GPU or CPU multi-thread support. Cannot use TMVA Deep Learning for CNN",
152writeOutputFile =
True
159if "imt" in ROOT.gROOT.GetConfigFeatures():
161 ROOT.gSystem.Setenv(
"OMP_NUM_THREADS",
"1")
164 print(
"Running in serial mode since ROOT does not support MT")
171 outputFile =
TFile.Open(
"TMVA_CNN_ClassificationOutput.root",
"RECREATE")
196 "TMVA_CNN_Classification",
202 AnalysisType=
"Classification",
203 Transformations=
None,
226inputFileName =
"images_data_16x16.root"
229if ROOT.gSystem.AccessPathName(inputFileName):
230 MakeImagesTree(nevt, 16, 16)
234 ROOT.Warning(
"TMVA_CNN_Classification",
"Error opening input file %s - exit", inputFileName.Data())
242signalTree = inputFile.Get(
"sig_tree")
243backgroundTree = inputFile.Get(
"bkg_tree")
245nEventsSig = signalTree.GetEntries()
246nEventsBkg = backgroundTree.GetEntries()
250backgroundWeight = 1.0
253loader.AddSignalTree(signalTree, signalWeight)
254loader.AddBackgroundTree(backgroundTree, backgroundWeight)
258loader.AddVariablesArray(
"vars", imgSize)
276nTrainSig = 0.8 * nEventsSig
277nTrainBkg = 0.8 * nEventsBkg
281loader.PrepareTrainingAndTestTree(
284 nTrain_Signal=nTrainSig,
285 nTrain_Background=nTrainBkg,
288 NormMode=
"NumEvents",
290 CalcCorrelations=
False,
316 BoostType=
"AdaBoost",
319 BaggedSampleFraction=0.5,
320 SeparationType=
"GiniIndex",
331 layoutString = ROOT.TString(
332 "DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,DENSE|1|LINEAR"
338 trainingString1 = ROOT.TString(
339 "LearningRate=1e-3,Momentum=0.9,Repetitions=1,"
340 "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1,"
341 "WeightDecay=1e-4,Regularization=None,"
342 "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0."
344 trainingString1 +=
",MaxEpochs=" + str(max_epochs)
347 dnnMethodName =
"TMVA_DNN_CPU"
353 dnnMethodName =
"TMVA_DNN_GPU"
361 ErrorStrategy=
"CROSSENTROPY",
363 WeightInitialization=
"XAVIER",
365 TrainingStrategy=trainingString1,
366 Architecture=dnnOptions
399 trainingString1 = ROOT.TString(
400 "LearningRate=1e-3,Momentum=0.9,Repetitions=1,"
401 "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1,"
402 "WeightDecay=1e-4,Regularization=None,"
403 "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0.0"
405 trainingString1 +=
",MaxEpochs=" + str(max_epochs)
408 cnnMethodName =
"TMVA_CNN_CPU"
413 cnnMethodName =
"TMVA_CNN_GPU"
421 ErrorStrategy=
"CROSSENTROPY",
423 WeightInitialization=
"XAVIER",
424 InputLayout=
"1|16|16",
425 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,RESHAPE|FLAT,DENSE|100|RELU,DENSE|1|LINEAR",
426 TrainingStrategy=trainingString1,
427 Architecture=cnnOptions,
435 ROOT.Info(
"TMVA_CNN_Classification",
"Using Convolutional PyTorch Model")
436 pyTorchFileName = str(ROOT.gROOT.GetTutorialDir())
437 pyTorchFileName +=
"/tmva/PyTorch_Generate_CNN_Model.py"
439 torch_spec = importlib.util.find_spec(
"torch")
440 if torch_spec
is not None and os.path.exists(pyTorchFileName):
444 ROOT.Info(
"TMVA_CNN_Classification",
"Booking PyTorch CNN model")
452 FilenameModel=
"PyTorchModelCNN.pt",
453 FilenameTrainedModel=
"PyTorchTrainedModelCNN.pt",
454 NumEpochs=max_epochs,
456 UserCode=str(pyTorchFileName)
460 "TMVA_CNN_Classification",
461 "PyTorch is not installed or model building file is not existing - skip using PyTorch",
465 ROOT.Info(
"TMVA_CNN_Classification",
"Building convolutional keras model")
469 from tensorflow.keras.models
import Sequential
470 from tensorflow.keras.optimizers
import Adam
474 from tensorflow.keras.layers
import Input, Dense, Dropout, Flatten, Conv2D, MaxPooling2D, Reshape
478 model.add(Reshape((16, 16, 1), input_shape=(256,)))
479 model.add(Conv2D(10, kernel_size=(3, 3), kernel_initializer=
"TruncatedNormal", activation=
"relu", padding=
"same"))
480 model.add(Conv2D(10, kernel_size=(3, 3), kernel_initializer=
"TruncatedNormal", activation=
"relu", padding=
"same"))
482 model.add(MaxPooling2D(pool_size=(2, 2)))
484 model.add(Dense(64, activation=
"tanh"))
486 model.add(Dense(2, activation=
"sigmoid"))
487 model.compile(loss=
"binary_crossentropy", optimizer=Adam(learning_rate=0.001), weighted_metrics=[
"accuracy"])
488 model.save(
"model_cnn.h5")
491 if not os.path.exists(
"model_cnn.h5"):
492 raise FileNotFoundError(
"Error creating Keras model file - skip using Keras")
495 ROOT.Info(
"TMVA_CNN_Classification",
"Booking convolutional keras model")
503 FilenameModel=
"model_cnn.h5",
504 FilenameTrainedModel=
"trained_model_cnn.h5",
505 NumEpochs=max_epochs,
507 GpuOptions=
"allow_growth=True",
514factory.TrainAllMethods()
518factory.TestAllMethods()
520factory.EvaluateAllMethods()
524c1 = factory.GetROCCurve(loader)
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t format
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
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.
This is the main MVA steering class.
static void PyInitialize()
Initialize Python interpreter.
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.