MCPcopy
hub / github.com/THUDM/CogDL / forward

Method forward

cogdl/models/emb/grarep.py:35–74  ·  view source on GitHub ↗
(self, graph, return_dict=False)

Source from the content-addressed store, hash-verified

33 self.step = step
34
35 def forward(self, graph, return_dict=False):
36 self.G = graph.to_networkx()
37 self.num_node = self.G.number_of_nodes()
38 A = np.asarray(nx.adjacency_matrix(self.G).todense(), dtype=float)
39 A = preprocessing.normalize(A, "l1")
40
41 log_beta = np.log(1.0 / self.num_node)
42 A_list = [A]
43 T_list = [sum(A).tolist()]
44 temp = A
45 # calculate A^1, A^2, ... , A^step, respectively
46 for i in range(self.step - 1):
47 temp = temp.dot(A)
48 A_list.append(A)
49 T_list.append(sum(temp).tolist())
50
51 final_emb = np.zeros((self.num_node, 1))
52 for k in range(self.step):
53 for j in range(A.shape[1]):
54 A_list[k][:, j] = np.log(A_list[k][:, j] / T_list[k][j] + 1e-20) - log_beta
55 for i in range(A.shape[0]):
56 A_list[k][i, j] = max(A_list[k][i, j], 0)
57 # concatenate all k-step representations
58 if k == 0:
59 dimension = self.dimension - int(self.dimension / self.step) * (self.step - 1)
60 final_emb = self._get_embedding(A_list[k], dimension)
61 else:
62 W = self._get_embedding(A_list[k], self.dimension / self.step)
63 final_emb = np.hstack((final_emb, W))
64
65 embeddings = final_emb
66 if return_dict:
67 features_matrix = dict()
68 for vid, node in enumerate(self.G.nodes()):
69 features_matrix[node] = embeddings[vid]
70 else:
71 features_matrix = np.zeros((graph.num_nodes, embeddings.shape[1]))
72 nx_nodes = self.G.nodes()
73 features_matrix[nx_nodes] = embeddings[np.arange(graph.num_nodes)]
74 return features_matrix
75
76 def _get_embedding(self, matrix, dimension):
77 # get embedding from svd and process normalization for ut

Callers

nothing calls this directly

Calls 5

_get_embeddingMethod · 0.95
normalizeMethod · 0.80
logMethod · 0.80
nodesMethod · 0.80
to_networkxMethod · 0.45

Tested by

no test coverage detected