8 import tensorflow
as tf
21 This example shows how to save a tensorflow net with tfdeploy, so you won't need tensorflow for mva expert anymore.
25 def get_model(number_of_features, number_of_spectators, number_of_events, training_fraction, parameters):
27 tf.reset_default_graph()
29 x = tf.placeholder(tf.float32, [
None, number_of_features], name=
'input')
30 y = tf.placeholder(tf.float32, [
None, 1])
32 def layer(x, shape, name, unit=tf.sigmoid):
33 with tf.name_scope(name)
as scope:
34 weights = tf.Variable(tf.truncated_normal(shape, stddev=1.0 / np.sqrt(float(shape[0]))), name=
'weights')
35 biases = tf.Variable(tf.constant(0.0, shape=[shape[1]]), name=
'biases')
36 layer = unit(tf.matmul(x, weights) + biases)
39 inference_hidden1 = layer(x, [number_of_features, number_of_features + 1],
'inference_hidden1')
40 inference_activation = layer(inference_hidden1, [number_of_features + 1, 1],
'inference_sigmoid', unit=tf.sigmoid)
43 inference_loss = -tf.reduce_sum(y * tf.log(inference_activation + epsilon) +
44 (1.0 - y) * tf.log(1 - inference_activation + epsilon))
46 inference_optimizer = tf.train.AdamOptimizer(learning_rate=0.01)
47 inference_minimize = inference_optimizer.minimize(inference_loss)
49 init = tf.global_variables_initializer()
51 config = tf.ConfigProto()
52 config.gpu_options.allow_growth =
True
53 session = tf.Session(config=config)
57 state = State(x, y, tf.identity(inference_activation, name=
'output'), inference_loss, inference_minimize, session)
62 def partial_fit(state, X, S, y, w, epoch):
64 Pass received data to tensorflow session
66 feed_dict = {state.x: X, state.y: y}
67 state.session.run(state.optimizer, feed_dict=feed_dict)
70 avg_cost = state.session.run(state.cost, feed_dict=feed_dict)
71 print(
"Epoch:",
'%04d' % (epoch),
"cost=",
"{:.9f}".format(avg_cost))
79 model = tfdeploy.Model()
80 model.add(state.activation, state.session)
81 with tempfile.TemporaryDirectory()
as path:
82 filename = os.path.join(path,
'model.pkl')
84 with open(filename,
'rb')
as file:
95 with tempfile.TemporaryDirectory()
as path:
96 filename = os.path.join(path,
'model.pkl')
97 with open(filename,
'w+b')
as file:
98 file.write(bytes(obj))
99 model = tfdeploy.Model(filename)
101 state.inp, state.outp = model.get(
'input',
'output')
107 Apply estimator to passed data.
109 r = state.outp.eval({state.inp: X}).flatten()
110 return np.require(r, dtype=np.float32, requirements=[
'A',
'W',
'C',
'O'])
118 def __init__(self, x=None, y=None, activation=None, cost=None, optimizer=None, session=None):
119 """ Constructor of the state object """
134 if __name__ ==
"__main__":
135 from basf2
import conditions
137 conditions.testing_payloads = [
138 'localdb/database.txt'
141 general_options = basf2_mva.GeneralOptions()
142 general_options.m_datafiles = basf2_mva.vector(
"train.root")
143 general_options.m_identifier =
"Simple"
144 general_options.m_treename =
"tree"
145 variables = [
'M',
'p',
'pt',
'pz',
146 'daughter(0, p)',
'daughter(0, pz)',
'daughter(0, pt)',
147 'daughter(1, p)',
'daughter(1, pz)',
'daughter(1, pt)',
148 'daughter(2, p)',
'daughter(2, pz)',
'daughter(2, pt)',
149 'chiProb',
'dr',
'dz',
150 'daughter(0, dr)',
'daughter(1, dr)',
151 'daughter(0, dz)',
'daughter(1, dz)',
152 'daughter(0, chiProb)',
'daughter(1, chiProb)',
'daughter(2, chiProb)',
153 'daughter(0, kaonID)',
'daughter(0, pionID)',
154 'daughterInvariantMass(0, 1)',
'daughterInvariantMass(0, 2)',
'daughterInvariantMass(1, 2)']
155 general_options.m_variables = basf2_mva.vector(*variables)
156 general_options.m_target_variable =
"isSignal"
158 specific_options = basf2_mva.PythonOptions()
159 specific_options.m_framework =
"tensorflow"
160 specific_options.m_steering_file =
'mva/examples/tensorflow/using_tfdeploy.py'
161 specific_options.m_nIterations = 10
162 specific_options.m_mini_batch_size = 100
163 specific_options.m_normalize =
True
164 training_start = time.time()
165 basf2_mva.teacher(general_options, specific_options)
166 training_stop = time.time()
167 training_time = training_stop - training_start
169 inference_start = time.time()
170 test_data = [
"test.root"]
171 p, t = method.apply_expert(basf2_mva.vector(*test_data), general_options.m_treename)
172 inference_stop = time.time()
173 inference_time = inference_stop - inference_start
175 print(
"Tensorflow", training_time, inference_time, auc)