def build_graph_fingerprint(self):
# Total number of graph convolution layers
n_layers = self.getitem('config', 'model/graph_conv_layers/n_layers')
# Create output dictionaries for graph convolutional layers and fingerprint output layers
self.output['graph_conv_layers'] = {}
self.output['fingerprint_output_layers'] = {}
# Input node embeddings
node_emb = self.input['node_features']
# Pre-compute the sum of the feature vectors labelling all edges connected to each node (if necessary)
self.output['graph_conv_layers']['edge_emb'] = None
if self.getitem('config', 'model/input/edge_features/use') and self.num_edge_features > 0:
self.output['graph_conv_layers']['edge_emb'] = tf.sparse_tensor_dense_matmul(self.input['inc_mat'],
self.input['edge_features'])
# Compute node and graph level fingerprints for the input layer
graph_fp, node_fp = self.output_embedding_layer(node_emb, 'output_embedding_layer_0')
# List of node-level embeddings per layer (output of graph convolutional layers), node-level fingerprints per
# layer (per-node output of fingerprint output layers) and graph-level fingerprints per layer (total output of
# fingerprint output layers)
self.output['graph_conv_layers']['node_emb'] = [node_emb]
self.output['fingerprint_output_layers']['node_fp'] = [node_fp]
self.output['fingerprint_output_layers']['graph_fp'] = [graph_fp]
# Create all graph convolutional layers and their respective fingerprint output layers
for layer_idx in xrange(1, n_layers+1):
node_emb = self.graph_convolution_layer(node_emb=self.output['graph_conv_layers']['node_emb'][-1],
scope='graph_conv_layer_%d' % layer_idx,
edge_emb=self.output['graph_conv_layers']['edge_emb'])
graph_fp, node_fp = self.output_embedding_layer(node_emb=self.output['graph_conv_layers']['node_emb'][-1],
scope='output_embedding_layer_%d' % layer_idx)
# Append outputs to lists
self.output['graph_conv_layers']['node_emb'].append(node_emb)
self.output['fingerprint_output_layers']['node_fp'].append(node_fp)
self.output['fingerprint_output_layers']['graph_fp'].append(graph_fp)
# Obtain graph fingerprint as the sum of the graph activations across all layers
self.output['fingerprint_output_layers']['fingerprint'] = tf.add_n(self.output['fingerprint_output_layers']['graph_fp'])
neural_fingerprints.py 文件源码
python
阅读 29
收藏 0
点赞 0
评论 0
评论列表
文章目录