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")
56ROOT.gSystem.Setenv(
"OMP_NUM_THREADS",
"1")
63def MakeImagesTree(n, nh, nw):
66 fileOutName =
"images_data_16x16.root"
73 sX2 = sX1 + delta_sigma
74 sY2 = sY1 - delta_sigma
75 h1 = ROOT.TH2D(
"h1",
"h1", nh, 0, 10, nw, 0, 10)
76 h2 = ROOT.TH2D(
"h2",
"h2", nh, 0, 10, nw, 0, 10)
77 f1 = ROOT.TF2(
"f1",
"xygaus")
78 f2 = ROOT.TF2(
"f2",
"xygaus")
79 sgn = ROOT.TTree(
"sig_tree",
"signal_tree")
80 bkg = ROOT.TTree(
"bkg_tree",
"background_tree")
82 f =
TFile(fileOutName,
"RECREATE")
83 x1 = ROOT.std.vector[
"float"](ntot)
84 x2 = ROOT.std.vector[
"float"](ntot)
88 bkg.Branch(
"vars",
"std::vector<float>", x1)
89 sgn.Branch(
"vars",
"std::vector<float>", x2)
94 f1.SetParameters(1, 5, sX1, 5, sY1)
95 f2.SetParameters(1, 5, sX2, 5, sY2)
96 ROOT.gRandom.SetSeed(0)
97 ROOT.Info(
"TMVA_CNN_Classification",
"Filling ROOT tree \n")
100 print(
"Generating image event ...", i)
105 f1.SetParameter(1, ROOT.gRandom.Uniform(3, 7))
106 f1.SetParameter(3, ROOT.gRandom.Uniform(3, 7))
107 f2.SetParameter(1, ROOT.gRandom.Uniform(3, 7))
108 f2.SetParameter(3, ROOT.gRandom.Uniform(3, 7))
110 h1.FillRandom(
"f1", nRndmEvts)
111 h2.FillRandom(
"f2", nRndmEvts)
117 x1[m] = h1.GetBinContent(k + 1, l + 1) + ROOT.gRandom.Gaus(0, pixelNoise)
118 x2[m] = h2.GetBinContent(k + 1, l + 1) + ROOT.gRandom.Gaus(0, pixelNoise)
126 print(
"Signal and background tree with images data written to the file %s", f.GetName())
131hasGPU = ROOT.gSystem.GetFromPipe(
"root-config --has-tmva-gpu") ==
"yes"
132hasCPU = ROOT.gSystem.GetFromPipe(
"root-config --has-tmva-cpu") ==
"yes"
136if (
not hasCPU
and not hasGPU) :
137 ROOT.Warning(
"TMVA_CNN_Classificaton",
"ROOT is not supporting tmva-cpu and tmva-gpu skip using TMVA-DNN and TMVA-CNN")
141if ROOT.gSystem.GetFromPipe(
"root-config --has-tmva-pymva") !=
"yes":
143 usePyTorchCNN =
False
149 "TMVA_CNN_Classificaton",
150 "TMVA is not build with GPU or CPU multi-thread support. Cannot use TMVA Deep Learning for CNN",
153writeOutputFile =
True
169 outputFile =
TFile.Open(
"TMVA_CNN_ClassificationOutput.root",
"RECREATE")
194 "TMVA_CNN_Classification",
200 AnalysisType=
"Classification",
201 Transformations=
None,
224inputFileName =
"images_data_16x16.root"
227if ROOT.gSystem.AccessPathName(inputFileName):
228 MakeImagesTree(nevt, 16, 16)
232 ROOT.Warning(
"TMVA_CNN_Classification",
"Error opening input file %s - exit", inputFileName.Data())
240signalTree = inputFile.Get(
"sig_tree")
241backgroundTree = inputFile.Get(
"bkg_tree")
243nEventsSig = signalTree.GetEntries()
244nEventsBkg = backgroundTree.GetEntries()
248backgroundWeight = 1.0
251loader.AddSignalTree(signalTree, signalWeight)
252loader.AddBackgroundTree(backgroundTree, backgroundWeight)
256loader.AddVariablesArray(
"vars", imgSize)
274nTrainSig = 0.8 * nEventsSig
275nTrainBkg = 0.8 * nEventsBkg
279loader.PrepareTrainingAndTestTree(
282 nTrain_Signal=nTrainSig,
283 nTrain_Background=nTrainBkg,
286 NormMode=
"NumEvents",
288 CalcCorrelations=
False,
314 BoostType=
"AdaBoost",
317 BaggedSampleFraction=0.5,
318 SeparationType=
"GiniIndex",
329 layoutString = ROOT.TString(
330 "DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,BNORM,DENSE|100|RELU,DENSE|1|LINEAR"
336 trainingString1 = ROOT.TString(
337 "LearningRate=1e-3,Momentum=0.9,Repetitions=1,"
338 "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1,"
339 "WeightDecay=1e-4,Regularization=None,"
340 "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0."
342 trainingString1 +=
",MaxEpochs=" + str(max_epochs)
345 dnnMethodName =
"TMVA_DNN_CPU"
351 dnnMethodName =
"TMVA_DNN_GPU"
359 ErrorStrategy=
"CROSSENTROPY",
361 WeightInitialization=
"XAVIER",
363 TrainingStrategy=trainingString1,
364 Architecture=dnnOptions
397 trainingString1 = ROOT.TString(
398 "LearningRate=1e-3,Momentum=0.9,Repetitions=1,"
399 "ConvergenceSteps=5,BatchSize=100,TestRepetitions=1,"
400 "WeightDecay=1e-4,Regularization=None,"
401 "Optimizer=ADAM,DropConfig=0.0+0.0+0.0+0.0"
403 trainingString1 +=
",MaxEpochs=" + str(max_epochs)
406 cnnMethodName =
"TMVA_CNN_CPU"
411 cnnMethodName =
"TMVA_CNN_GPU"
419 ErrorStrategy=
"CROSSENTROPY",
421 WeightInitialization=
"XAVIER",
422 InputLayout=
"1|16|16",
423 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",
424 TrainingStrategy=trainingString1,
425 Architecture=cnnOptions,
433 ROOT.Info(
"TMVA_CNN_Classification",
"Using Convolutional PyTorch Model")
434 pyTorchFileName = str(ROOT.gROOT.GetTutorialDir())
435 pyTorchFileName +=
"/tmva/PyTorch_Generate_CNN_Model.py"
437 torch_spec = importlib.util.find_spec(
"torch")
438 if torch_spec
is not None and os.path.exists(pyTorchFileName):
442 ROOT.Info(
"TMVA_CNN_Classification",
"Booking PyTorch CNN model")
450 FilenameModel=
"PyTorchModelCNN.pt",
451 FilenameTrainedModel=
"PyTorchTrainedModelCNN.pt",
452 NumEpochs=max_epochs,
454 UserCode=str(pyTorchFileName)
458 "TMVA_CNN_Classification",
459 "PyTorch is not installed or model building file is not existing - skip using PyTorch",
463 ROOT.Info(
"TMVA_CNN_Classification",
"Building convolutional keras model")
467 from tensorflow.keras.models
import Sequential
468 from tensorflow.keras.optimizers
import Adam
472 from tensorflow.keras.layers
import Input, Dense, Dropout, Flatten, Conv2D, MaxPooling2D, Reshape
476 model.add(Reshape((16, 16, 1), input_shape=(256,)))
477 model.add(Conv2D(10, kernel_size=(3, 3), kernel_initializer=
"TruncatedNormal", activation=
"relu", padding=
"same"))
478 model.add(Conv2D(10, kernel_size=(3, 3), kernel_initializer=
"TruncatedNormal", activation=
"relu", padding=
"same"))
480 model.add(MaxPooling2D(pool_size=(2, 2)))
482 model.add(Dense(64, activation=
"tanh"))
484 model.add(Dense(2, activation=
"sigmoid"))
485 model.compile(loss=
"binary_crossentropy", optimizer=Adam(learning_rate=0.001), weighted_metrics=[
"accuracy"])
486 model.save(
"model_cnn.h5")
489 if not os.path.exists(
"model_cnn.h5"):
490 raise FileNotFoundError(
"Error creating Keras model file - skip using Keras")
493 ROOT.Info(
"TMVA_CNN_Classification",
"Booking convolutional keras model")
501 FilenameModel=
"model_cnn.h5",
502 FilenameTrainedModel=
"trained_model_cnn.h5",
503 NumEpochs=max_epochs,
505 GpuOptions=
"allow_growth=True",
512factory.TrainAllMethods()
516factory.TestAllMethods()
518factory.EvaluateAllMethods()
522c1 = 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
A ROOT file is composed of a header, followed by consecutive data records (TKey instances) with a wel...
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.