Belle II Software  release-06-00-14
simple.py
1 #!/usr/bin/env python3
2 
3 
10 
11 import numpy as np
12 import tensorflow as tf
13 import basf2_mva
14 import basf2_mva_util
15 import time
16 
18 
19 
20 def get_model(number_of_features, number_of_spectators, number_of_events, training_fraction, parameters):
21 
22  tf.reset_default_graph()
23  x = tf.placeholder(tf.float32, [None, number_of_features])
24  y = tf.placeholder(tf.float32, [None, 1])
25 
26  def layer(x, shape, name, unit=tf.sigmoid):
27  with tf.name_scope(name):
28  weights = tf.Variable(tf.truncated_normal(shape, stddev=1.0 / np.sqrt(float(shape[0]))), name='weights')
29  biases = tf.Variable(tf.constant(0.0, shape=[shape[1]]), name='biases')
30  layer = unit(tf.matmul(x, weights) + biases)
31  return layer
32 
33  inference_hidden1 = layer(x, [number_of_features, number_of_features + 1], 'inference_hidden1')
34  inference_activation = layer(inference_hidden1, [number_of_features + 1, 1], 'inference_sigmoid', unit=tf.sigmoid)
35 
36  epsilon = 1e-5
37  inference_loss = -tf.reduce_sum(y * tf.log(inference_activation + epsilon) +
38  (1.0 - y) * tf.log(1 - inference_activation + epsilon))
39 
40  inference_optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
41  inference_minimize = inference_optimizer.minimize(inference_loss)
42 
43  init = tf.global_variables_initializer()
44 
45  config = tf.ConfigProto()
46  config.gpu_options.allow_growth = True
47  session = tf.Session(config=config)
48 
49  session.run(init)
50  state = State(x, y, inference_activation, inference_loss, inference_minimize, session)
51  return state
52 
53 
54 def partial_fit(state, X, S, y, w, epoch):
55  """
56  Pass received data to tensorflow session
57  """
58  feed_dict = {state.x: X, state.y: y}
59  state.session.run(state.optimizer, feed_dict=feed_dict)
60 
61  if epoch % 100 == 0:
62  avg_cost = state.session.run(state.cost, feed_dict=feed_dict)
63  print("Epoch:", '%04d' % (epoch), "cost=", "{:.9f}".format(avg_cost))
64  return True
65 
66 
67 if __name__ == "__main__":
68  from basf2 import conditions
69  # NOTE: do not use testing payloads in production! Any results obtained like this WILL NOT BE PUBLISHED
70  conditions.testing_payloads = [
71  'localdb/database.txt'
72  ]
73 
74  general_options = basf2_mva.GeneralOptions()
75  general_options.m_datafiles = basf2_mva.vector("train.root")
76  general_options.m_identifier = "Simple"
77  general_options.m_treename = "tree"
78  variables = ['M', 'p', 'pt', 'pz',
79  'daughter(0, p)', 'daughter(0, pz)', 'daughter(0, pt)',
80  'daughter(1, p)', 'daughter(1, pz)', 'daughter(1, pt)',
81  'daughter(2, p)', 'daughter(2, pz)', 'daughter(2, pt)',
82  'chiProb', 'dr', 'dz',
83  'daughter(0, dr)', 'daughter(1, dr)',
84  'daughter(0, dz)', 'daughter(1, dz)',
85  'daughter(0, chiProb)', 'daughter(1, chiProb)', 'daughter(2, chiProb)',
86  'daughter(0, kaonID)', 'daughter(0, pionID)',
87  'daughterInvariantMass(0, 1)', 'daughterInvariantMass(0, 2)', 'daughterInvariantMass(1, 2)']
88  general_options.m_variables = basf2_mva.vector(*variables)
89  general_options.m_target_variable = "isSignal"
90 
91  specific_options = basf2_mva.PythonOptions()
92  specific_options.m_framework = "tensorflow"
93  specific_options.m_steering_file = 'mva/examples/tensorflow/simple.py'
94  specific_options.m_nIterations = 100
95  specific_options.m_mini_batch_size = 100
96  specific_options.m_normalize = True
97  training_start = time.time()
98  basf2_mva.teacher(general_options, specific_options)
99  training_stop = time.time()
100  training_time = training_stop - training_start
101  method = basf2_mva_util.Method(general_options.m_identifier)
102  inference_start = time.time()
103  test_data = ["test.root"] * 10
104  p, t = method.apply_expert(basf2_mva.vector(*test_data), general_options.m_treename)
105  inference_stop = time.time()
106  inference_time = inference_stop - inference_start
108  print("Tensorflow", training_time, inference_time, auc)
def calculate_roc_auc(p, t)