From ab053224c0f01b0274582abc2a97b22549c103ec Mon Sep 17 00:00:00 2001 From: Vincenzo Eduardo Padulano Date: Wed, 27 Nov 2024 18:02:41 +0100 Subject: [PATCH] [tmva] Fix usage of TFile in Python tutorials --- tutorials/tmva/keras/ClassificationKeras.py | 115 ++++++++------- tutorials/tmva/keras/MulticlassKeras.py | 148 +++++++++++--------- tutorials/tmva/keras/RegressionKeras.py | 139 +++++++++--------- 3 files changed, 217 insertions(+), 185 deletions(-) diff --git a/tutorials/tmva/keras/ClassificationKeras.py b/tutorials/tmva/keras/ClassificationKeras.py index dc53228d40dfc..50f92bf19fa9e 100755 --- a/tutorials/tmva/keras/ClassificationKeras.py +++ b/tutorials/tmva/keras/ClassificationKeras.py @@ -1,70 +1,81 @@ #!/usr/bin/env python -## \file -## \ingroup tutorial_tmva_keras -## \notebook -nodraw -## This tutorial shows how to do classification in TMVA with neural networks -## trained with keras. -## -## \macro_code -## -## \date 2017 -## \author TMVA Team - -from ROOT import TMVA, TFile, TTree, TCut +# \file +# \ingroup tutorial_tmva_keras +# \notebook -nodraw +# This tutorial shows how to do classification in TMVA with neural networks +# trained with keras. +# +# \macro_code +# +# \date 2017 +# \author TMVA Team + +from ROOT import TMVA, TFile, TCut from subprocess import call from os.path import isfile from tensorflow.keras.models import Sequential -from tensorflow.keras.layers import Dense, Activation +from tensorflow.keras.layers import Dense from tensorflow.keras.optimizers import SGD -# Setup TMVA -TMVA.Tools.Instance() -TMVA.PyMethodBase.PyInitialize() -output = TFile.Open('TMVA_Classification_Keras.root', 'RECREATE') -factory = TMVA.Factory('TMVAClassification', output, - '!V:!Silent:Color:DrawProgressBar:Transformations=D,G:AnalysisType=Classification') +def create_model(): + # Generate model + + # Define model + model = Sequential() + model.add(Dense(64, activation='relu', input_dim=4)) + model.add(Dense(2, activation='softmax')) + + # Set loss and optimizer + model.compile(loss='categorical_crossentropy', + optimizer=SGD(learning_rate=0.01), weighted_metrics=['accuracy', ]) + + # Store model to file + model.save('modelClassification.h5') + model.summary() + + +def run(): + with TFile.Open('TMVA_Classification_Keras.root', 'RECREATE') as output, TFile.Open('tmva_class_example.root') as data: + factory = TMVA.Factory('TMVAClassification', output, + '!V:!Silent:Color:DrawProgressBar:Transformations=D,G:AnalysisType=Classification') -# Load data -if not isfile('tmva_class_example.root'): - call(['curl', '-L', '-O', 'http://root.cern/files/tmva_class_example.root']) + signal = data.Get('TreeS') + background = data.Get('TreeB') -data = TFile.Open('tmva_class_example.root') -signal = data.Get('TreeS') -background = data.Get('TreeB') + dataloader = TMVA.DataLoader('dataset') + for branch in signal.GetListOfBranches(): + dataloader.AddVariable(branch.GetName()) -dataloader = TMVA.DataLoader('dataset') -for branch in signal.GetListOfBranches(): - dataloader.AddVariable(branch.GetName()) + dataloader.AddSignalTree(signal, 1.0) + dataloader.AddBackgroundTree(background, 1.0) + dataloader.PrepareTrainingAndTestTree(TCut(''), + 'nTrain_Signal=4000:nTrain_Background=4000:SplitMode=Random:NormMode=NumEvents:!V') -dataloader.AddSignalTree(signal, 1.0) -dataloader.AddBackgroundTree(background, 1.0) -dataloader.PrepareTrainingAndTestTree(TCut(''), - 'nTrain_Signal=4000:nTrain_Background=4000:SplitMode=Random:NormMode=NumEvents:!V') + # Book methods + factory.BookMethod(dataloader, TMVA.Types.kFisher, 'Fisher', + '!H:!V:Fisher:VarTransform=D,G') + factory.BookMethod(dataloader, TMVA.Types.kPyKeras, 'PyKeras', + 'H:!V:VarTransform=D,G:FilenameModel=modelClassification.h5:FilenameTrainedModel=trainedModelClassification.h5:NumEpochs=20:BatchSize=32') -# Generate model + # Run training, test and evaluation + factory.TrainAllMethods() + factory.TestAllMethods() + factory.EvaluateAllMethods() -# Define model -model = Sequential() -model.add(Dense(64, activation='relu', input_dim=4)) -model.add(Dense(2, activation='softmax')) -# Set loss and optimizer -model.compile(loss='categorical_crossentropy', - optimizer=SGD(learning_rate=0.01), weighted_metrics=['accuracy', ]) +if __name__ == "__main__": + # Setup TMVA + TMVA.Tools.Instance() + TMVA.PyMethodBase.PyInitialize() -# Store model to file -model.save('modelClassification.h5') -model.summary() + # Create and store the ML model + create_model() -# Book methods -factory.BookMethod(dataloader, TMVA.Types.kFisher, 'Fisher', - '!H:!V:Fisher:VarTransform=D,G') -factory.BookMethod(dataloader, TMVA.Types.kPyKeras, 'PyKeras', - 'H:!V:VarTransform=D,G:FilenameModel=modelClassification.h5:FilenameTrainedModel=trainedModelClassification.h5:NumEpochs=20:BatchSize=32') + # Load data + if not isfile('tmva_class_example.root'): + call(['curl', '-L', '-O', 'http://root.cern/files/tmva_class_example.root']) -# Run training, test and evaluation -factory.TrainAllMethods() -factory.TestAllMethods() -factory.EvaluateAllMethods() + # Run TMVA + run() diff --git a/tutorials/tmva/keras/MulticlassKeras.py b/tutorials/tmva/keras/MulticlassKeras.py index d22fadec67f0e..7018e927f60c3 100755 --- a/tutorials/tmva/keras/MulticlassKeras.py +++ b/tutorials/tmva/keras/MulticlassKeras.py @@ -1,75 +1,85 @@ #!/usr/bin/env python -## \file -## \ingroup tutorial_tmva_keras -## \notebook -nodraw -## This tutorial shows how to do multiclass classification in TMVA with neural -## networks trained with keras. -## -## \macro_code -## -## \date 2017 -## \author TMVA Team - -from ROOT import TMVA, TFile, TTree, TCut, gROOT +# \file +# \ingroup tutorial_tmva_keras +# \notebook -nodraw +# This tutorial shows how to do multiclass classification in TMVA with neural +# networks trained with keras. +# +# \macro_code +# +# \date 2017 +# \author TMVA Team + +from ROOT import TMVA, TFile, TCut, gROOT from os.path import isfile from tensorflow.keras.models import Sequential -from tensorflow.keras.layers import Dense, Activation +from tensorflow.keras.layers import Dense from tensorflow.keras.optimizers import SGD -# Setup TMVA -TMVA.Tools.Instance() -TMVA.PyMethodBase.PyInitialize() - -output = TFile.Open('TMVA.root', 'RECREATE') -factory = TMVA.Factory('TMVAClassification', output, - '!V:!Silent:Color:DrawProgressBar:Transformations=D,G:AnalysisType=multiclass') - -# Load data -if not isfile('tmva_example_multiple_background.root'): - createDataMacro = str(gROOT.GetTutorialDir()) + '/tmva/createData.C' - print(createDataMacro) - gROOT.ProcessLine('.L {}'.format(createDataMacro)) - gROOT.ProcessLine('create_MultipleBackground(4000)') - -data = TFile.Open('tmva_example_multiple_background.root') -signal = data.Get('TreeS') -background0 = data.Get('TreeB0') -background1 = data.Get('TreeB1') -background2 = data.Get('TreeB2') - -dataloader = TMVA.DataLoader('dataset') -for branch in signal.GetListOfBranches(): - dataloader.AddVariable(branch.GetName()) - -dataloader.AddTree(signal, 'Signal') -dataloader.AddTree(background0, 'Background_0') -dataloader.AddTree(background1, 'Background_1') -dataloader.AddTree(background2, 'Background_2') -dataloader.PrepareTrainingAndTestTree(TCut(''), - 'SplitMode=Random:NormMode=NumEvents:!V') - -# Generate model - -# Define model -model = Sequential() -model.add(Dense(32, activation='relu', input_dim=4)) -model.add(Dense(4, activation='softmax')) - -# Set loss and optimizer -model.compile(loss='categorical_crossentropy', optimizer=SGD(learning_rate=0.01), weighted_metrics=['accuracy',]) - -# Store model to file -model.save('modelMultiClass.h5') -model.summary() - -# Book methods -factory.BookMethod(dataloader, TMVA.Types.kFisher, 'Fisher', - '!H:!V:Fisher:VarTransform=D,G') -factory.BookMethod(dataloader, TMVA.Types.kPyKeras, 'PyKeras', - 'H:!V:VarTransform=D,G:FilenameModel=modelMultiClass.h5:FilenameTrainedModel=trainedModelMultiClass.h5:NumEpochs=20:BatchSize=32') - -# Run TMVA -factory.TrainAllMethods() -factory.TestAllMethods() -factory.EvaluateAllMethods() + +def create_model(): + # Define model + model = Sequential() + model.add(Dense(32, activation='relu', input_dim=4)) + model.add(Dense(4, activation='softmax')) + + # Set loss and optimizer + model.compile(loss='categorical_crossentropy', optimizer=SGD( + learning_rate=0.01), weighted_metrics=['accuracy',]) + + # Store model to file + model.save('modelMultiClass.h5') + model.summary() + + +def run(): + with TFile.Open('TMVA.root', 'RECREATE') as output, TFile.Open('tmva_example_multiple_background.root') as data: + factory = TMVA.Factory('TMVAClassification', output, + '!V:!Silent:Color:DrawProgressBar:Transformations=D,G:AnalysisType=multiclass') + + signal = data.Get('TreeS') + background0 = data.Get('TreeB0') + background1 = data.Get('TreeB1') + background2 = data.Get('TreeB2') + + dataloader = TMVA.DataLoader('dataset') + for branch in signal.GetListOfBranches(): + dataloader.AddVariable(branch.GetName()) + + dataloader.AddTree(signal, 'Signal') + dataloader.AddTree(background0, 'Background_0') + dataloader.AddTree(background1, 'Background_1') + dataloader.AddTree(background2, 'Background_2') + dataloader.PrepareTrainingAndTestTree(TCut(''), + 'SplitMode=Random:NormMode=NumEvents:!V') + + # Book methods + factory.BookMethod(dataloader, TMVA.Types.kFisher, 'Fisher', + '!H:!V:Fisher:VarTransform=D,G') + factory.BookMethod(dataloader, TMVA.Types.kPyKeras, 'PyKeras', + 'H:!V:VarTransform=D,G:FilenameModel=modelMultiClass.h5:FilenameTrainedModel=trainedModelMultiClass.h5:NumEpochs=20:BatchSize=32') + + # Run TMVA + factory.TrainAllMethods() + factory.TestAllMethods() + factory.EvaluateAllMethods() + + +if __name__ == "__main__": + # Generate model + create_model() + + # Setup TMVA + TMVA.Tools.Instance() + TMVA.PyMethodBase.PyInitialize() + + # Load data + if not isfile('tmva_example_multiple_background.root'): + createDataMacro = str(gROOT.GetTutorialDir()) + '/tmva/createData.C' + print(createDataMacro) + gROOT.ProcessLine('.L {}'.format(createDataMacro)) + gROOT.ProcessLine('create_MultipleBackground(4000)') + + # Run TMVA + run() diff --git a/tutorials/tmva/keras/RegressionKeras.py b/tutorials/tmva/keras/RegressionKeras.py index 759bc47328ecc..72e4ebdf704d9 100755 --- a/tutorials/tmva/keras/RegressionKeras.py +++ b/tutorials/tmva/keras/RegressionKeras.py @@ -1,71 +1,82 @@ #!/usr/bin/env python -## \file -## \ingroup tutorial_tmva_keras -## \notebook -nodraw -## This tutorial shows how to do regression in TMVA with neural networks -## trained with keras. -## -## \macro_code -## -## \date 2017 -## \author TMVA Team - -from ROOT import TMVA, TFile, TTree, TCut +# \file +# \ingroup tutorial_tmva_keras +# \notebook -nodraw +# This tutorial shows how to do regression in TMVA with neural networks +# trained with keras. +# +# \macro_code +# +# \date 2017 +# \author TMVA Team + +from ROOT import TMVA, TFile, TCut from subprocess import call from os.path import isfile from tensorflow.keras.models import Sequential -from tensorflow.keras.layers import Dense, Activation +from tensorflow.keras.layers import Dense from tensorflow.keras.optimizers import SGD -# Setup TMVA -TMVA.Tools.Instance() -TMVA.PyMethodBase.PyInitialize() - -output = TFile.Open('TMVA_Regression_Keras.root', 'RECREATE') -factory = TMVA.Factory('TMVARegression', output, - '!V:!Silent:Color:DrawProgressBar:Transformations=D,G:AnalysisType=Regression') - -# Load data -if not isfile('tmva_reg_example.root'): - call(['curl', '-L', '-O', 'http://root.cern/files/tmva_reg_example.root']) - -data = TFile.Open('tmva_reg_example.root') -tree = data.Get('TreeR') - -dataloader = TMVA.DataLoader('dataset') -for branch in tree.GetListOfBranches(): - name = branch.GetName() - if name != 'fvalue': - dataloader.AddVariable(name) -dataloader.AddTarget('fvalue') - -dataloader.AddRegressionTree(tree, 1.0) -#use only 1000 events since evaluation is very slow (especially on MacOS). Increase it to get meaningful results -dataloader.PrepareTrainingAndTestTree(TCut(''), - 'nTrain_Regression=1000:SplitMode=Random:NormMode=NumEvents:!V') - -# Generate model - -# Define model -model = Sequential() -model.add(Dense(64, activation='tanh', input_dim=2)) -model.add(Dense(1, activation='linear')) - -# Set loss and optimizer -model.compile(loss='mean_squared_error', optimizer=SGD(learning_rate=0.01), weighted_metrics=[]) - -# Store model to file -model.save('modelRegression.h5') -model.summary() - -# Book methods -factory.BookMethod(dataloader, TMVA.Types.kPyKeras, 'PyKeras', - 'H:!V:VarTransform=D,G:FilenameModel=modelRegression.h5:FilenameTrainedModel=trainedModelRegression.h5:NumEpochs=20:BatchSize=32') -factory.BookMethod(dataloader, TMVA.Types.kBDT, 'BDTG', - '!H:!V:VarTransform=D,G:NTrees=1000:BoostType=Grad:Shrinkage=0.1:UseBaggedBoost:BaggedSampleFraction=0.5:nCuts=20:MaxDepth=4') - -# Run TMVA -factory.TrainAllMethods() -factory.TestAllMethods() -factory.EvaluateAllMethods() + +def create_model(): + # Define model + model = Sequential() + model.add(Dense(64, activation='tanh', input_dim=2)) + model.add(Dense(1, activation='linear')) + + # Set loss and optimizer + model.compile(loss='mean_squared_error', optimizer=SGD( + learning_rate=0.01), weighted_metrics=[]) + + # Store model to file + model.save('modelRegression.h5') + model.summary() + + +def run(): + + with TFile.Open('TMVA_Regression_Keras.root', 'RECREATE') as output, TFile.Open('tmva_reg_example.root') as data: + factory = TMVA.Factory('TMVARegression', output, + '!V:!Silent:Color:DrawProgressBar:Transformations=D,G:AnalysisType=Regression') + + tree = data.Get('TreeR') + + dataloader = TMVA.DataLoader('dataset') + for branch in tree.GetListOfBranches(): + name = branch.GetName() + if name != 'fvalue': + dataloader.AddVariable(name) + dataloader.AddTarget('fvalue') + + dataloader.AddRegressionTree(tree, 1.0) + # use only 1000 events since evaluation is very slow (especially on MacOS). Increase it to get meaningful results + dataloader.PrepareTrainingAndTestTree(TCut(''), + 'nTrain_Regression=1000:SplitMode=Random:NormMode=NumEvents:!V') + + # Book methods + factory.BookMethod(dataloader, TMVA.Types.kPyKeras, 'PyKeras', + 'H:!V:VarTransform=D,G:FilenameModel=modelRegression.h5:FilenameTrainedModel=trainedModelRegression.h5:NumEpochs=20:BatchSize=32') + factory.BookMethod(dataloader, TMVA.Types.kBDT, 'BDTG', + '!H:!V:VarTransform=D,G:NTrees=1000:BoostType=Grad:Shrinkage=0.1:UseBaggedBoost:BaggedSampleFraction=0.5:nCuts=20:MaxDepth=4') + + # Run TMVA + factory.TrainAllMethods() + factory.TestAllMethods() + factory.EvaluateAllMethods() + + +if __name__ == "__main__": + # Setup TMVA + TMVA.Tools.Instance() + TMVA.PyMethodBase.PyInitialize() + + # Load data + if not isfile('tmva_reg_example.root'): + call(['curl', '-L', '-O', 'http://root.cern/files/tmva_reg_example.root']) + + # Generate model + create_model() + + # Run TMVA + run()