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