-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[tmva] Fix usage of TFile in Python tutorials
- Loading branch information
1 parent
2b6c1e2
commit ab05322
Showing
3 changed files
with
217 additions
and
185 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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() |
Oops, something went wrong.