Hello dears,
I have multiple graphs and want to classify their nodes. Until now, all the examples regarding node classification consist one graph not multiple graphs. Can anybody give me a suggestion?
Thanks
Hi @mkh
Let’s say you have multiple DGL graph objects g_{1}, g_{2}, g_{3} with # nodes n_{1}, n_{2}, and n_{3}. Using DGL, you can create a batch graph (think block-diagonal matrix), using the dgl.batch
function:
graph = dgl.batch([g1, g2, g3])
Similarly, you would need to stack the node feature matrices (assuming the feature matrices are of the same size) as
feat = th.stack([feat_1, feat_2, feat_3], axis=2)
feat = feat.view(feat.shape[0]*feat.shape[-1], in_feats)
otherwise, you could use Numpy
feats = th.tensor(np.row_stack([feat_1, feat_2, feat_3])).float()
This creates a large graph, with no edges shared between sub-graphs – as such, no information is convolved across graphs, and a large feature matrix. You can plug graph
and feat
directly into your model for both training and testing-purposes.
Very cool answer.
Forgiving me I am a beginner, trying many times still fails to implement this function.
Can you share some code of this function?
Thanks in advance.