14 import tensorflow
as tf
15 import tensorflow.contrib.keras
as keras
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
26 old_time = time.time()
29 def get_model(number_of_features, number_of_spectators, number_of_events, training_fraction, parameters):
31 Build feed forward keras model
33 input = Input(shape=(number_of_features,))
35 net = Dense(units=number_of_features, activation=tanh)(input)
37 net = Dense(units=number_of_features, activation=tanh)(net)
38 net = BatchNormalization()(net)
40 net = Dense(units=number_of_features, activation=tanh)(net)
41 net = Dropout(rate=0.4)(net)
43 output = Dense(units=1, activation=sigmoid)(net)
45 state = State(Model(input, output))
47 state.model.compile(optimizer=adam(lr=0.01), loss=binary_crossentropy, metrics=[
'accuracy'])
54 def begin_fit(state, Xtest, Stest, ytest, wtest):
56 Returns just the state object
64 def partial_fit(state, X, S, y, w, epoch):
66 Pass received data to tensorflow session
68 class TestCallback(Callback):
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))
76 state.model.fit(X, y, batch_size=500, epochs=10, callbacks=[TestCallback()])
80 if __name__ ==
"__main__":
81 from basf2
import conditions
83 conditions.testing_payloads = [
84 'localdb/database.txt'
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"
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
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
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)