5from graph_nets
import utils_tf
12snd = np.array([1,2,3,4,2,3,4,3,4,4,0,0,0,0,1,1,1,2,2,3], dtype=
'int32')
13rec = np.array([0,0,0,0,1,1,1,2,2,3,1,2,3,4,2,3,4,3,4,4], dtype=
'int32')
22def get_graph_data_dict(num_nodes, num_edges, NODE_FEATURE_SIZE=2, EDGE_FEATURE_SIZE=2, GLOBAL_FEATURE_SIZE=1):
24 "globals": 10*np.random.rand(GLOBAL_FEATURE_SIZE).astype(np.float32)-5.,
25 "nodes": 10*np.random.rand(num_nodes, NODE_FEATURE_SIZE).astype(np.float32)-5.,
26 "edges": 10*np.random.rand(num_edges, EDGE_FEATURE_SIZE).astype(np.float32)-5.,
33 return snt.Sequential([
34 snt.nets.MLP([LATENT_SIZE]*NUM_LAYERS, activate_final=
True),
35 snt.LayerNorm(axis=-1, create_offset=
True, create_scale=
True)
40 def __init__(self, name="MLPGraphIndependent"):
41 super(MLPGraphIndependent, self).
__init__(name=name)
43 edge_model_fn =
lambda: snt.nets.MLP([LATENT_SIZE]*NUM_LAYERS, activate_final=
True),
44 node_model_fn =
lambda: snt.nets.MLP([LATENT_SIZE]*NUM_LAYERS, activate_final=
True),
45 global_model_fn =
lambda: snt.nets.MLP([LATENT_SIZE]*NUM_LAYERS, activate_final=
True))
53 super(MLPGraphNetwork, self).
__init__(name=name)
55 edge_model_fn=make_mlp_model,
56 node_model_fn=make_mlp_model,
57 global_model_fn=make_mlp_model)
66 name="EncodeProcessDecode"):
67 super(EncodeProcessDecode, self).
__init__(name=name)
73 def __call__(self, input_op, num_processing_steps):
77 for _
in range(num_processing_steps):
78 core_input = utils_tf.concat([latent0, latent], axis=1)
79 latent = self.
_core(core_input)
92input_graph_data = utils_tf.data_dicts_to_graphs_tuple([GraphData])
97input_core_graph_data = utils_tf.data_dicts_to_graphs_tuple([CoreGraphData])
103output_gn =
ep_model(input_graph_data, processing_steps)
109encoder = ROOT.TMVA.Experimental.SOFIE.RModel_GraphIndependent.ParseFromMemory(ep_model._encoder._network, GraphData, filename =
"gnn_encoder")
111encoder.OutputGenerated()
113core = ROOT.TMVA.Experimental.SOFIE.RModel_GNN.ParseFromMemory(ep_model._core._network, CoreGraphData, filename =
"gnn_core")
115core.OutputGenerated()
117decoder = ROOT.TMVA.Experimental.SOFIE.RModel_GraphIndependent.ParseFromMemory(ep_model._decoder._network, DecodeGraphData, filename =
"gnn_decoder")
119decoder.OutputGenerated()
121output_transform = ROOT.TMVA.Experimental.SOFIE.RModel_GraphIndependent.ParseFromMemory(ep_model._output_transform._network, DecodeGraphData, filename =
"gnn_output_transform")
122output_transform.Generate()
123output_transform.OutputGenerated()
126gen_code =
'''#pragma cling optimize(2)
127#include "gnn_encoder.hxx"
128#include "gnn_core.hxx"
129#include "gnn_decoder.hxx"
130#include "gnn_output_transform.hxx"'''
131ROOT.gInterpreter.Declare(gen_code)
135 n = np.asarray(output.node_data)
136 e = np.asarray(output.edge_data)
137 g = np.asarray(output.global_data)
139 print(
"SOFIE data ... shapes",n.shape,e.shape,g.shape)
140 print(
" node data", n.reshape(n.size,))
141 print(
" edge data", e.reshape(e.size,))
142 print(
" global data",g.reshape(g.size,))
145 output_data = ROOT.TMVA.Experimental.SOFIE.Copy(input_data)
165 for _
in range(processing_steps):
166 core_input = ROOT.TMVA.Experimental.SOFIE.Concatenate(latent0, latent, axis=1)
172 output_ops.append(output)
183for i
in range(0,numevts):
190for i
in range(0,numevts):
191 graphData = dataSet[i]
192 gnet_data_i = utils_tf.data_dicts_to_graphs_tuple([graphData])
193 gnetData.append(gnet_data_i)
197 output_gn =
ep_model(inputGraphData, processing_steps)
201hG = ROOT.TH1D(
"hG",
"Result from graphnet",20,1,0)
202for i
in range(0,numevts):
204 g = out[1].globals.numpy()
208print(
"elapsed time for ",numevts,
"events = ",end-start)
212for i
in range(0,numevts):
213 graphData = dataSet[i]
214 input_data = ROOT.TMVA.Experimental.SOFIE.GNN_Data()
215 input_data.node_data = ROOT.TMVA.Experimental.AsRTensor(graphData[
'nodes'])
216 input_data.edge_data = ROOT.TMVA.Experimental.AsRTensor(graphData[
'edges'])
217 input_data.global_data = ROOT.TMVA.Experimental.AsRTensor(graphData[
'globals'])
218 input_data.edge_index = ROOT.TMVA.Experimental.AsRTensor(np.stack((graphData[
'receivers'],graphData[
'senders'])))
219 sofieData.append(input_data)
223print(
"time to convert data to SOFIE format",endSC-end)
225hS = ROOT.TH1D(
"hS",
"Result from SOFIE",20,1,0)
229print(
"time to create SOFIE GNN class", start-start0)
230for i
in range(0,numevts):
232 out = gnn.infer(sofieData[i])
233 g = np.asarray(out[1].global_data)
237print(
"elapsed time for ",numevts,
"events = ",end-start)
248hDe = ROOT.TH1D(
"hDe",
"Difference for edge data",40,1,0)
249hDn = ROOT.TH1D(
"hDn",
"Difference for node data",40,1,0)
250hDg = ROOT.TH1D(
"hDg",
"Difference for global data",40,1,0)
252for i
in range(0,numevts):
253 outSofie = gnn.infer(sofieData[i])
255 edgesG = outGnet[1].edges.numpy()
256 edgesS = np.asarray(outSofie[1].edge_data)
257 if (i == 0) : print(edgesG.shape)
258 for j
in range(0,edgesG.shape[0]) :
259 for k
in range(0,edgesG.shape[1]) :
260 hDe.Fill(edgesG[j,k]-edgesS[j,k])
262 nodesG = outGnet[1].nodes.numpy()
263 nodesS = np.asarray(outSofie[1].node_data)
264 for j
in range(0,nodesG.shape[0]) :
265 for k
in range(0,nodesG.shape[1]) :
266 hDn.Fill(nodesG[j,k]-nodesS[j,k])
268 globG = outGnet[1].globals.numpy()
269 globS = np.asarray(outSofie[1].global_data)
270 for j
in range(0,globG.shape[1]) :
271 hDg.Fill(globG[0,j]-globS[j])
__call__(self, input_op, num_processing_steps)
__init__(self, name="EncodeProcessDecode")
__init__(self, name="MLPGraphIndependent")
__init__(self, name="MLPGraphNetwork")
get_graph_data_dict(num_nodes, num_edges, NODE_FEATURE_SIZE=2, EDGE_FEATURE_SIZE=2, GLOBAL_FEATURE_SIZE=1)
PrintSofie(output, printShape=False)