25 inputFile = str(ROOT.gROOT.GetTutorialDir()) +
"/machine_learning/data/Higgs_data.root"
28 sigData = df1.AsNumpy(columns=[
"m_jj",
"m_jjj",
"m_lv",
"m_jlv",
"m_bb",
"m_wbb",
"m_wwbb"])
32 xsig = np.column_stack(list(sigData.values()))
33 data_sig_size = xsig.shape[0]
34 print(
"size of data", data_sig_size)
38 bkgData = df2.AsNumpy(columns=[
"m_jj",
"m_jjj",
"m_lv",
"m_jlv",
"m_bb",
"m_wbb",
"m_wwbb"])
39 xbkg = np.column_stack(list(bkgData.values()))
40 data_bkg_size = xbkg.shape[0]
42 ysig = np.ones(data_sig_size)
43 ybkg = np.zeros(data_bkg_size)
44 inputs_data = np.concatenate((xsig, xbkg), axis=0).astype(np.float32)
45 inputs_targets = np.concatenate((ysig, ybkg), axis=0).astype(np.float32)
48 rng = np.random.default_rng(1234)
49 idx = rng.permutation(inputs_data.shape[0])
50 ntrain = inputs_data.shape[0] // 2
52 x_train = inputs_data[idx[:ntrain]]
53 y_train = inputs_targets[idx[:ntrain]].reshape(-1, 1)
54 x_test = inputs_data[idx[ntrain:]]
55 y_test = inputs_targets[idx[ntrain:]].reshape(-1, 1)
57 return x_train, y_train, x_test, y_test
73 x = torch.from_numpy(x)
74 y = torch.from_numpy(y)
75 criterion = nn.BCELoss()
76 optimizer = torch.optim.Adam(model.parameters())
77 nbatches = x.shape[0] // batch_size
78 for epoch
in range(epochs):
79 perm = torch.randperm(x.shape[0])
81 for i
in range(nbatches):
82 idx = perm[i * batch_size : (i + 1) * batch_size]
84 loss = criterion(model(x[idx]), y[idx])
87 running_loss += loss.item()
88 print(f
"Epoch {epoch + 1}/{epochs} - average loss: {running_loss / nbatches:.4f}")
97 modelFile = modelName +
".onnx"
98 dummy_x = torch.randn(1, 7)
102 def filtered_kwargs(func, **candidate_kwargs):
103 sig = inspect.signature(func)
104 return {k: v
for k, v
in candidate_kwargs.items()
if k
in sig.parameters}
106 kwargs = filtered_kwargs(
108 input_names=[
"input"],
109 output_names=[
"output"],
113 print(
"calling torch.onnx.export with parameters", kwargs)
115 torch.onnx.export(model, dummy_x, modelFile, **kwargs)
117 print(
"model exported to ONNX as", modelFile)