| @@ -75,23 +75,38 @@ def feature_matrix(g): | |||
| piazche[i][v-1] = 1 | |||
| return piazche | |||
| def remove_random_node(graph, max_size=40, min_size=10): | |||
| ''' | |||
| removes a random node from the gragh | |||
| returns the remaining graph matrix and the removed node links | |||
| ''' | |||
| if len(graph.nodes()) >= max_size or len(graph.nodes()) < min_size: | |||
| return None | |||
| relabeled_graph = nx.relabel.convert_node_labels_to_integers(graph) | |||
| choice = np.random.choice(list(relabeled_graph.nodes())) | |||
| remaining_graph = nx.to_numpy_matrix(relabeled_graph.subgraph(filter(lambda x: x != choice, list(relabeled_graph.nodes())))) | |||
| removed_node = nx.to_numpy_matrix(relabeled_graph)[choice] | |||
| graph_length = len(remaining_graph) | |||
| # source_graph = np.pad(remaining_graph, [(0, max_size - graph_length), (0, max_size - graph_length)]) | |||
| # target_graph = np.copy(source_graph) | |||
| removed_node_row = np.asarray(removed_node)[0] | |||
| # target_graph[graph_length] = np.pad(removed_node_row, [(0, max_size - len(removed_node_row))]) | |||
| return remaining_graph, removed_node_row | |||
| # def remove_random_node(graph, max_size=40, min_size=10): | |||
| # ''' | |||
| # removes a random node from the gragh | |||
| # returns the remaining graph matrix and the removed node links | |||
| # ''' | |||
| # if len(graph.nodes()) >= max_size or len(graph.nodes()) < min_size: | |||
| # return None | |||
| # relabeled_graph = nx.relabel.convert_node_labels_to_integers(graph) | |||
| # choice = np.random.choice(list(relabeled_graph.nodes())) | |||
| # remaining_graph = nx.to_numpy_matrix(relabeled_graph.subgraph(filter(lambda x: x != choice, list(relabeled_graph.nodes())))) | |||
| # removed_node = nx.to_numpy_matrix(relabeled_graph)[choice] | |||
| # graph_length = len(remaining_graph) | |||
| # # source_graph = np.pad(remaining_graph, [(0, max_size - graph_length), (0, max_size - graph_length)]) | |||
| # # target_graph = np.copy(source_graph) | |||
| # removed_node_row = np.asarray(removed_node)[0] | |||
| # # target_graph[graph_length] = np.pad(removed_node_row, [(0, max_size - len(removed_node_row))]) | |||
| # return remaining_graph, removed_node_row | |||
| def prepare_graph_data(graph, max_size=40, min_size=10): | |||
| ''' | |||
| gets a graph as an input | |||
| returns a graph with a randomly removed node adj matrix [0], its feature matrix [0], the removed node true links [2] | |||
| ''' | |||
| if len(graph.nodes()) >= max_size or len(graph.nodes()) < min_size: | |||
| return None | |||
| relabeled_graph = nx.relabel.convert_node_labels_to_integers(graph) | |||
| choice = np.random.choice(list(relabeled_graph.nodes())) | |||
| remaining_graph = relabeled_graph.subgraph(filter(lambda x: x != choice, list(relabeled_graph.nodes()))) | |||
| remaining_graph_adj = nx.to_numpy_matrix(remaining_graph) | |||
| removed_node = nx.to_numpy_matrix(relabeled_graph)[choice] | |||
| removed_node_row = np.asarray(removed_node)[0] | |||
| return remaining_graph_adj, feature_matrix(remaining_graph), removed_node_row | |||
| """" | |||
| Layers: | |||
| @@ -146,5 +161,6 @@ class GraphAttn(nn.Module): | |||
| scores = attention(query, key, value, self.key_dim) | |||
| concat = scores.transpose(1,2).contiguous().view(bs, -1, self.model_dim) | |||
| output = self.out(concat) | |||
| output = output.view(bs, self.model_dim) | |||
| return output | |||