예제 #1
0
 def forward_all(self, z, edge_index):
     adj = torch.eye(z.shape[0])
     for i in range(0, len(edge_index[0])):
         dist = -1*hyperboloid_dist(z[edge_index[0][i]], z[edge_index[1][i]], self.radius)
         probs = 1. / (torch.exp((dist - self.r) / self.t) + 1)
         adj[edge_index[0][i]][edge_index[1][i]] = probs
     return adj
예제 #2
0
 def forward_all(self, z, edge_index):
     adj = torch.eye(z.shape[0])
     dist = 1./hyperboloid_dist(z[edge_index[0]], z[edge_index[1]], self.radius)
     scores = torch.sigmoid(self.p) * F.softmax(dist)
     probs = scores * 1. / max(scores)
     for i in range(0, len(edge_index[0])):
         adj[edge_index[0][i]][edge_index[1][i]] = probs[i]
     return adj
예제 #3
0
 def forward(self, z, edge_index):
     z_mu0 = inverse_exp_map_mu0(z, self.radius)
     dist = -1*hyperboloid_dist(z[edge_index[0]], z[edge_index[1]],
                                self.radius).squeeze()
     r_gnn = self.r(z_mu0, edge_index)
     t_gnn = self.t(z_mu0, edge_index)
     inp_r = torch.cat((r_gnn[edge_index[0]],r_gnn[edge_index[1]]), dim=1)
     inp_t = torch.cat((t_gnn[edge_index[0]],t_gnn[edge_index[1]]), dim=1)
     r = self.r_mlp(inp_r).squeeze()
     t = self.t_mlp(inp_t).squeeze()
     probs = torch.sigmoid((dist - r) / t)
     return probs.squeeze()
예제 #4
0
 def forward_all(self, z, edge_index):
     adj = torch.eye(z.shape[0])
     z_mu0 = inverse_exp_map_mu0(z, self.radius)
     dist = -1*hyperboloid_dist(z[edge_index[0]], z[edge_index[1]], self.radius)
     r_gnn = self.r(z_mu0, edge_index)
     t_gnn = self.t(z_mu0, edge_index)
     inp_r = torch.cat((r_gnn[edge_index[0]],r_gnn[edge_index[1]]), dim=1)
     inp_t = torch.cat((t_gnn[edge_index[0]],t_gnn[edge_index[1]]), dim=1)
     r = self.r_mlp(inp_r).squeeze()
     t = self.t_mlp(inp_r).squeeze()
     probs = torch.sigmoid((dist - r) / t)
     for i in range(0, len(edge_index[0])):
         adj[edge_index[0][i]][edge_index[1][i]] = probs[i]
     return adj
예제 #5
0
 def forward(self, z, edge_index):
     dist = 1./hyperboloid_dist(z[edge_index[0]], z[edge_index[1]], self.radius)
     scores = torch.sigmoid(self.p) * F.softmax(dist)
     probs = scores * 1. / max(scores)
     return probs.squeeze()
예제 #6
0
 def forward_all(self, z):
     dist = -1*hyperboloid_dist(z, z.t(), self.radius)
     scores = torch.tanh(dist)
     return scores.squeeze()
예제 #7
0
 def forward(self, z, edge_index):
     dist = -1*hyperboloid_dist(z[edge_index[0]], z[edge_index[1]], self.radius)
     scores = torch.tanh(dist)
     return scores.squeeze()
예제 #8
0
 def forward(self, z, edge_index):
     dist = hyperboloid_dist(z[edge_index[0]], z[edge_index[1]], self.radius)
     probs = 1. / (torch.exp((dist - self.r) / self.t) + 1)
     return probs.squeeze()