25def CreateModel(nlayers=4, nunits=64):
28 for i
in range(nlayers):
37def TrainModel(model, x, y, epochs=5, batch_size=50):
42 nbatches =
x.shape[0] // batch_size
43 for epoch
in range(epochs):
46 for i
in range(nbatches):
47 idx = perm[i * batch_size : (i + 1) * batch_size]
53 print(f
"Epoch {epoch + 1}/{epochs} - average loss: {running_loss / nbatches:.4f}")
56def ExportModel(model, modelName):
62 modelFile = modelName +
".onnx"
73 input_names=[
"input"],
74 output_names=[
"output"],
78 print(
"calling torch.onnx.export with parameters", kwargs)
82 print(
"model exported to ONNX as", modelFile)
91 sigData =
df1.AsNumpy(columns=[
"m_jj",
"m_jjj",
"m_lv",
"m_jlv",
"m_bb",
"m_wbb",
"m_wwbb"])
97 print(
"size of data", data_sig_size)
101 bkgData =
df2.AsNumpy(columns=[
"m_jj",
"m_jjj",
"m_lv",
"m_jlv",
"m_bb",
"m_wbb",
"m_wwbb"])
115 x_train = inputs_data[idx[:ntrain]]
116 y_train = inputs_targets[idx[:ntrain]].
reshape(-1, 1)
117 x_test = inputs_data[idx[ntrain:]]
118 y_test = inputs_targets[idx[ntrain:]].
reshape(-1, 1)
120 return x_train, y_train, x_test, y_test
126 for modelName
in modelNames:
127 model = CreateModel(4, 64)
128 TrainModel(model, x_train, y_train)
135x_train, y_train, x_test, y_test = PrepareData()
141modelNames = [
"Higgs_Model_4L_50",
"Higgs_Model_4L_200",
"Higgs_Model_2L_500"]
142model1, model2, model3 =
TrainModels(x_train, y_train, modelNames)
151 print(
"Generating inference code for the ONNX model from ", modelFile,
"in the header ", generatedHeaderFile)
157 return generatedHeaderFile
160generatedHeaderFile =
"Higgs_Model.hxx"
163 print(
"removing existing file", generatedHeaderFile)
166weightFile =
"Higgs_Model.root"
168 print(
"removing existing file", weightFile)
185hs1 =
ROOT.TH1D(
"hs1",
"Signal result 4L 50", 100, 0, 1)
186hs2 =
ROOT.TH1D(
"hs2",
"Signal result 4L 200", 100, 0, 1)
187hs3 =
ROOT.TH1D(
"hs3",
"Signal result 2L 500", 100, 0, 1)
189hb1 =
ROOT.TH1D(
"hb1",
"Background result 4L 50", 100, 0, 1)
190hb2 =
ROOT.TH1D(
"hb2",
"Background result 4L 200", 100, 0, 1)
191hb3 =
ROOT.TH1D(
"hb3",
"Background result 2L 500", 100, 0, 1)
200 result1 =
EvalModel(session1, x_test[i, :])
201 result2 =
EvalModel(session2, x_test[i, :])
202 result3 =
EvalModel(session3, x_test[i, :])
237 for i
in range(0, n):
244 xs, ws = GetContent(hs)
245 xb, wb = GetContent(hb)
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
ROOT's RDataFrame offers a modern, high-level interface for analysis of data stored in TTree ,...