| @@ -85,51 +85,28 @@ class DecagonLayer(Layer): | |||||
| self.keep_prob = keep_prob | self.keep_prob = keep_prob | ||||
| self.rel_activation = rel_activation | self.rel_activation = rel_activation | ||||
| self.layer_activation = layer_activation | self.layer_activation = layer_activation | ||||
| self.convolutions = None | |||||
| self.next_layer_repr = None | |||||
| self.build() | self.build() | ||||
| def build(self): | def build(self): | ||||
| self.convolutions = {} | |||||
| for (node_type_row, node_type_column) in self.data.relation_types.keys(): | |||||
| adjacency_matrices = \ | |||||
| self.data.get_adjacency_matrices(node_type_row, node_type_column) | |||||
| self.convolutions[node_type_row, node_type_column] = SparseMultiDGCA(self.input_dim, | |||||
| self.output_dim, adjacency_matrices, | |||||
| self.keep_prob, self.rel_activation) | |||||
| # for node_type_row, node_type_col in enumerate(self.data.node_ | |||||
| # if rt.node_type_row == i or rt.node_type_col == i: | |||||
| def __call__(self): | |||||
| prev_layer_repr = self.previous_layer() | |||||
| next_layer_repr = defaultdict(list) | |||||
| self.next_layer_repr = defaultdict(list) | |||||
| for (nt_row, nt_col), rel in self.data.relation_types.items(): | for (nt_row, nt_col), rel in self.data.relation_types.items(): | ||||
| conv = SparseDropoutGraphConvActivation(self.input_dim[nt_col], | conv = SparseDropoutGraphConvActivation(self.input_dim[nt_col], | ||||
| self.output_dim[nt_row], rel.adjacency_matrix, | self.output_dim[nt_row], rel.adjacency_matrix, | ||||
| self.keep_prob, self.rel_activation) | self.keep_prob, self.rel_activation) | ||||
| next_layer_repr[nt_row].append(conv) | |||||
| self.next_layer_repr[nt_row].append((conv, nt_col)) | |||||
| conv = SparseDropoutGraphConvActivation(self.input_dim[nt_row], | conv = SparseDropoutGraphConvActivation(self.input_dim[nt_row], | ||||
| self.output_dim[nt_col], rel.adjacency_matrix.transpose(0, 1), | self.output_dim[nt_col], rel.adjacency_matrix.transpose(0, 1), | ||||
| self.keep_prob, self.rel_activation) | self.keep_prob, self.rel_activation) | ||||
| next_layer_repr[nt_col].append(conv) | |||||
| self.next_layer_repr[nt_col].append((conv, nt_row)) | |||||
| def __call__(self): | |||||
| prev_layer_repr = self.previous_layer() | |||||
| next_layer_repr = self.next_layer_repr | |||||
| for i in range(len(self.data.node_types)): | |||||
| next_layer_repr[i] = map(lambda conv, neighbor_type: \ | |||||
| conv(prev_layer_repr[neighbor_type]), next_layer_repr[i]) | |||||
| next_layer_repr = list(map(sum, next_layer_repr)) | next_layer_repr = list(map(sum, next_layer_repr)) | ||||
| return next_layer_repr | return next_layer_repr | ||||
| #for i, nt in enumerate(self.data.node_types): | |||||
| # new_repr = [] | |||||
| # for nt_row, nt_col in self.data.relation_types.keys(): | |||||
| # if nt_row != i and nt_col != i: | |||||
| # continue | |||||
| # if nt_row == i: | |||||
| # x = prev_layer_repr[nt_col] | |||||
| # else: | |||||
| # x = prev_layer_repr[nt_row] | |||||
| # conv = self.convolutions[key] | |||||
| # new_repr.append(conv(x)) | |||||
| # new_repr = sum(new_repr) | |||||
| # new_layer_repr.append(new_repr) | |||||
| # return new_layer_repr | |||||