Hello, I am having a hard time understanding a little bit the notations of DGL. Initially, the edges information are in a form of (node index, node linked to). For instance, we have ‘h’ as the embeddings gotten in the model. Initial H is equal to the node features. Then in normal syntax we have a propagation step through the Adjacency matrix = > 'Z = (Ahat H \theta) with A_hat following a symmetric normalization. In general notations we first multiply H by weights and then adding features from neighboring nodes v_j \in N(i) and updating features of node v_i. So, the gcn_msg function gathers the info from features from all neighboring nodes by selecting the node index and getting all the connected nodes data. And then gcn_Reduces does the Aggregation to finally self.nodes update in the memory the new “data” for all nodes?
def message_func(edges):
return {‘m’: edges.src[‘h’]}
def forward(self, h):
if self.dropout:
h = self.dropout(h)
self.g.ndata[‘h’] = torch.mm(h, self.weight)
self.g.update_all(gcn_msg, gcn_reduce, self.node_update)
h = self.g.ndata.pop(‘h’)
return h
Thank you in advance for all your time and willingness to help.