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 =
"encoder")
111encoder.OutputGenerated()
113core = ROOT.TMVA.Experimental.SOFIE.RModel_GNN.ParseFromMemory(ep_model._core._network, CoreGraphData, filename =
"core")
115core.OutputGenerated()
117decoder = ROOT.TMVA.Experimental.SOFIE.RModel_GraphIndependent.ParseFromMemory(ep_model._decoder._network, DecodeGraphData, filename =
"decoder")
119decoder.OutputGenerated()
121output_transform = ROOT.TMVA.Experimental.SOFIE.RModel_GraphIndependent.ParseFromMemory(ep_model._output_transform._network, DecodeGraphData, filename =
"output_transform")
122output_transform.Generate()
123output_transform.OutputGenerated()
126ROOT.gInterpreter.Declare(
'#pragma cling optimize(2)')
127ROOT.gInterpreter.Declare(
'#include "encoder.hxx"')
128ROOT.gInterpreter.Declare(
'#include "core.hxx"')
129ROOT.gInterpreter.Declare(
'#include "decoder.hxx"')
130ROOT.gInterpreter.Declare(
'#include "output_transform.hxx"')
134 n = np.asarray(output.node_data)
135 e = np.asarray(output.edge_data)
136 g = np.asarray(output.global_data)
138 print(
"SOFIE data ... shapes",n.shape,e.shape,g.shape)
139 print(
" node data", n.reshape(n.size,))
140 print(
" edge data", e.reshape(e.size,))
141 print(
" global data",g.reshape(g.size,))
144 output_data = ROOT.TMVA.Experimental.SOFIE.Copy(input_data)
164 for _
in range(processing_steps):
165 core_input = ROOT.TMVA.Experimental.SOFIE.Concatenate(latent0, latent, axis=1)
171 output_ops.append(output)
182for i
in range(0,numevts):
189for i
in range(0,numevts):
190 graphData = dataSet[i]
191 gnet_data_i = utils_tf.data_dicts_to_graphs_tuple([graphData])
192 gnetData.append(gnet_data_i)
196 output_gn =
ep_model(inputGraphData, processing_steps)
200hG = ROOT.TH1D(
"hG",
"Result from graphnet",20,1,0)
201for i
in range(0,numevts):
203 g = out[1].globals.numpy()
207print(
"elapsed time for ",numevts,
"events = ",end-start)
211for i
in range(0,numevts):
212 graphData = dataSet[i]
213 input_data = ROOT.TMVA.Experimental.SOFIE.GNN_Data()
214 input_data.node_data = ROOT.TMVA.Experimental.AsRTensor(graphData[
'nodes'])
215 input_data.edge_data = ROOT.TMVA.Experimental.AsRTensor(graphData[
'edges'])
216 input_data.global_data = ROOT.TMVA.Experimental.AsRTensor(graphData[
'globals'])
217 input_data.edge_index = ROOT.TMVA.Experimental.AsRTensor(np.stack((graphData[
'receivers'],graphData[
'senders'])))
218 sofieData.append(input_data)
222print(
"time to convert data to SOFIE format",endSC-end)
224hS = ROOT.TH1D(
"hS",
"Result from SOFIE",20,1,0)
228print(
"time to create SOFIE GNN class", start-start0)
229for i
in range(0,numevts):
231 out = gnn.infer(sofieData[i])
232 g = np.asarray(out[1].global_data)
236print(
"elapsed time for ",numevts,
"events = ",end-start)
247hDe = ROOT.TH1D(
"hDe",
"Difference for edge data",40,1,0)
248hDn = ROOT.TH1D(
"hDn",
"Difference for node data",40,1,0)
249hDg = ROOT.TH1D(
"hDg",
"Difference for global data",40,1,0)
251for i
in range(0,numevts):
252 outSofie = gnn.infer(sofieData[i])
254 edgesG = outGnet[1].edges.numpy()
255 edgesS = np.asarray(outSofie[1].edge_data)
256 if (i == 0) : print(edgesG.shape)
257 for j
in range(0,edgesG.shape[0]) :
258 for k
in range(0,edgesG.shape[1]) :
259 hDe.Fill(edgesG[j,k]-edgesS[j,k])
261 nodesG = outGnet[1].nodes.numpy()
262 nodesS = np.asarray(outSofie[1].node_data)
263 for j
in range(0,nodesG.shape[0]) :
264 for k
in range(0,nodesG.shape[1]) :
265 hDn.Fill(nodesG[j,k]-nodesS[j,k])
267 globG = outGnet[1].globals.numpy()
268 globS = np.asarray(outSofie[1].global_data)
269 for j
in range(0,globG.shape[1]) :
270 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)