Belle II Software  release-05-01-25
simple_deep.py
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 
4 # Dennis Weyland 2017
5 
6 # This example shows the implementation of a simple MLP in keras.
7 
8 import basf2_mva
9 import basf2_mva_util
10 import time
11 
13 
14 import tensorflow as tf
15 import tensorflow.contrib.keras as keras
16 
17 from keras.layers import Input, Dense, Dropout
18 from keras.layers.normalization import BatchNormalization
19 from keras.models import Model
20 from keras.optimizers import adam
21 from keras.losses import binary_crossentropy
22 from keras.activations import sigmoid, tanh
23 from keras.callbacks import Callback
24 
25 
26 old_time = time.time()
27 
28 
29 def get_model(number_of_features, number_of_spectators, number_of_events, training_fraction, parameters):
30  """
31  Build feed forward keras model
32  """
33  input = Input(shape=(number_of_features,))
34 
35  net = Dense(units=number_of_features, activation=tanh)(input)
36  for i in range(7):
37  net = Dense(units=number_of_features, activation=tanh)(net)
38  net = BatchNormalization()(net)
39  for i in range(7):
40  net = Dense(units=number_of_features, activation=tanh)(net)
41  net = Dropout(rate=0.4)(net)
42 
43  output = Dense(units=1, activation=sigmoid)(net)
44 
45  state = State(Model(input, output))
46 
47  state.model.compile(optimizer=adam(lr=0.01), loss=binary_crossentropy, metrics=['accuracy'])
48 
49  state.model.summary()
50 
51  return state
52 
53 
54 def begin_fit(state, Xtest, Stest, ytest, wtest):
55  """
56  Returns just the state object
57  """
58  state.Xtest = Xtest
59  state.ytest = ytest
60 
61  return state
62 
63 
64 def partial_fit(state, X, S, y, w, epoch):
65  """
66  Pass received data to tensorflow session
67  """
68  class TestCallback(Callback):
69 
70  def on_epoch_end(self, epoch, logs={}):
71  loss, acc = state.model.evaluate(state.Xtest, state.ytest, verbose=0, batch_size=1000)
72  loss2, acc2 = state.model.evaluate(X[:10000], y[:10000], verbose=0, batch_size=1000)
73  print('\nTesting loss: {}, acc: {}'.format(loss, acc))
74  print('Training loss: {}, acc: {}'.format(loss2, acc2))
75 
76  state.model.fit(X, y, batch_size=500, epochs=10, callbacks=[TestCallback()])
77  return False
78 
79 
80 if __name__ == "__main__":
81  from basf2 import conditions
82  # NOTE: do not use testing payloads in production! Any results obtained like this WILL NOT BE PUBLISHED
83  conditions.testing_payloads = [
84  'localdb/database.txt'
85  ]
86 
87  general_options = basf2_mva.GeneralOptions()
88  general_options.m_datafiles = basf2_mva.vector("train.root")
89  general_options.m_identifier = "deep_keras"
90  general_options.m_treename = "tree"
91  variables = ['M', 'p', 'pt', 'pz',
92  'daughter(0, p)', 'daughter(0, pz)', 'daughter(0, pt)',
93  'daughter(1, p)', 'daughter(1, pz)', 'daughter(1, pt)',
94  'daughter(2, p)', 'daughter(2, pz)', 'daughter(2, pt)',
95  'chiProb', 'dr', 'dz',
96  'daughter(0, dr)', 'daughter(1, dr)',
97  'daughter(0, dz)', 'daughter(1, dz)',
98  'daughter(0, chiProb)', 'daughter(1, chiProb)', 'daughter(2, chiProb)',
99  'daughter(0, kaonID)', 'daughter(0, pionID)',
100  'daughterInvariantMass(0, 1)', 'daughterInvariantMass(0, 2)', 'daughterInvariantMass(1, 2)']
101  general_options.m_variables = basf2_mva.vector(*variables)
102  general_options.m_target_variable = "isSignal"
103 
104  specific_options = basf2_mva.PythonOptions()
105  specific_options.m_framework = "contrib_keras"
106  specific_options.m_steering_file = 'mva/examples/keras/simple_deep.py'
107  specific_options.m_normalize = True
108  specific_options.m_training_fraction = 0.9
109 
110  training_start = time.time()
111  basf2_mva.teacher(general_options, specific_options)
112  training_stop = time.time()
113  training_time = training_stop - training_start
114  method = basf2_mva_util.Method(general_options.m_identifier)
115  inference_start = time.time()
116  test_data = ["test.root"] * 10
117  p, t = method.apply_expert(basf2_mva.vector(*test_data), general_options.m_treename)
118  inference_stop = time.time()
119  inference_time = inference_stop - inference_start
121  print("Tensorflow", training_time, inference_time, auc)
basf2_mva_util.calculate_roc_auc
def calculate_roc_auc(p, t)
Definition: basf2_mva_util.py:39
basf2_mva_util.Method
Definition: basf2_mva_util.py:81
basf2_mva_python_interface.contrib_keras
Definition: contrib_keras.py:1