def build(self): if self.unsupervised: self.ego_flow = gl.EgoFlow( self._sample_seed, self._positive_sample, self._receptive_fn, self.src_ego_spec, dst_ego_spec=self.src_ego_spec, # h**o graph. negative_sample=self._negative_sample, full_graph_mode=self.full_graph_mode) self.pos_src_ego_tensor = self.ego_flow.pos_src_ego_tensor self.pos_dst_ego_tensor = self.ego_flow.pos_dst_ego_tensor self.neg_dst_ego_tensor = self.ego_flow.neg_dst_ego_tensor self.iterator = self.ego_flow.iterator pos_src_emb = self.encoders['src'].encode(self.pos_src_ego_tensor) pos_dst_emb = self.encoders['dst'].encode(self.pos_dst_ego_tensor) neg_dst_emb = self.encoders['dst'].encode(self.neg_dst_ego_tensor) self.loss = self._unsupervised_loss(pos_src_emb, pos_dst_emb, neg_dst_emb) self.loss = self.loss[0] else: self.ego_flow = gl.EgoFlow(self._sample_seed, self._positive_sample, self._receptive_fn, self.src_ego_spec, full_graph_mode=self.full_graph_mode) self.iterator = self.ego_flow.iterator self.pos_src_ego_tensor = self.ego_flow.pos_src_ego_tensor src_emb = self.encoders['src'].encode(self.pos_src_ego_tensor) labels = self.pos_src_ego_tensor.src.labels self.loss = self._supervised_loss(src_emb, labels) return self.loss, self.iterator
def build(self): ego_flow = gl.EgoFlow(self._sample_seed, self._positive_sample, self._receptive_fn, self.node_ego_spec, dst_ego_spec=self.node_ego_spec, edge_ego_spec=self.edge_ego_spec, negative_sample=self._negative_sample) iterator = ego_flow.iterator pos_src_ego_tensor = ego_flow.pos_src_ego_tensor pos_dst_ego_tensor = ego_flow.pos_dst_ego_tensor neg_src_ego_tensor = ego_flow.neg_src_ego_tensor neg_dst_ego_tensor = ego_flow.neg_dst_ego_tensor pos_edge_ego_tensor = ego_flow.pos_edge_ego_tensor neg_edge_ego_tensor = ego_flow.neg_edge_ego_tensor pos_src_emb = self.encoders['src'].encode(pos_src_ego_tensor) pos_dst_emb = self.encoders['dst'].encode(pos_dst_ego_tensor) neg_src_emb = self.encoders['src'].encode(neg_src_ego_tensor) neg_dst_emb = self.encoders['dst'].encode(neg_dst_ego_tensor) pos_edge_emb = self.encoders['edge'].encode(pos_edge_ego_tensor) neg_edge_emb = self.encoders['edge'].encode(neg_edge_ego_tensor) loss = self._unsupervised_loss_with_edge(pos_src_emb, pos_edge_emb, neg_src_emb, pos_dst_emb, neg_edge_emb, neg_dst_emb) return loss[0], iterator
def node_embedding(self, type): node_ego_flow = gl.EgoFlow(self._save_node_sample_seed, self._positive_sample, self._receptive_fn, self.ego_spec) iterator = node_ego_flow.iterator ego_tensor = node_ego_flow.pos_src_ego_tensor src_emb = self.encoders['src'].encode(ego_tensor) src_ids = ego_tensor.src.ids return src_ids, src_emb, iterator
def test_acc(self): test_ego_flow = gl.EgoFlow(self._test_sample_seed, self._positive_sample, self._receptive_fn, self.src_ego_spec, full_graph_mode=self.full_graph_mode) test_iterator = test_ego_flow.iterator test_pos_src_ego_tensor = test_ego_flow.pos_src_ego_tensor test_logits = self.encoders['src'].encode(test_pos_src_ego_tensor) test_labels = test_pos_src_ego_tensor.src.labels return self._accuracy(test_logits, test_labels), test_iterator
def val_acc(self): val_ego_flow = gl.EgoFlow(self._val_sample_seed, self._positive_sample, self._receptive_fn, self.src_ego_spec, full_graph_mode=self.full_graph_mode) val_iterator = val_ego_flow.iterator val_pos_src_ego_tensor = val_ego_flow.pos_src_ego_tensor val_logits = self.encoders['src'].encode(val_pos_src_ego_tensor) val_labels = val_pos_src_ego_tensor.src.labels return self._accuracy(val_logits, val_labels), val_iterator
def node_embedding(self, type='u'): """Return embeddings for saving""" if type == 'u': # for save u embeddings ego_flow = gl.EgoFlow(self._u_sample_seed, self._positive_sample, self._receptive_fn, self.u_ego_spec) iterator = ego_flow.iterator ego_tensor = ego_flow.pos_src_ego_tensor emb = self.encoders['src'].encode(ego_tensor) ids = ego_tensor.src.ids else: # for save i embeddings ego_flow = gl.EgoFlow(self._i_sample_seed, self._positive_sample, self._receptive_fn, self.i_ego_spec) iterator = ego_flow.iterator ego_tensor = ego_flow.pos_src_ego_tensor emb = self.encoders['dst'].encode(ego_tensor) ids = ego_tensor.src.ids return ids, emb, iterator
def node_embedding(self, type='entity'): """Return embeddings for saving""" if type == 'entity': # for save entity embeddings ego_flow = gl.EgoFlow(self._entity_sample_seed, self._positive_sample, self._receptive_fn, self.node_ego_spec) iterator = ego_flow.iterator ego_tensor = ego_flow.pos_src_ego_tensor emb = self.encoders['src'].encode(ego_tensor) ids = ego_tensor.src.ids else: # for save relation embeddings ego_flow = gl.EgoFlow(self._relation_sample_seed, self._positive_sample, self._receptive_fn, self.node_ego_spec) iterator = ego_flow.iterator ego_tensor = ego_flow.pos_src_ego_tensor emb = self.encoders['edge'].encode(ego_tensor) ids = ego_tensor.src.ids return ids, emb, iterator
def build(self): ego_flow = gl.EgoFlow(self._sample_seed, self._positive_sample, self._receptive_fn, self.src_ego_spec, full_graph_mode=self.full_graph_mode) iterator = ego_flow.iterator pos_src_ego_tensor = ego_flow.pos_src_ego_tensor src_emb = self.encoders['src'].encode(pos_src_ego_tensor) labels = pos_src_ego_tensor.src.labels loss = self._supervised_loss(src_emb, labels) return loss, iterator
def build(self): self.ego_flow = gl.EgoFlow(self._sample_seed, self._positive_sample, self._receptive_fn, self.ego_spec, dst_ego_spec=self.ego_spec, # h**o graph. negative_sample=None) # use sampled softmax loss. self.iterator = self.ego_flow.iterator self.pos_src_ego_tensor = self.ego_flow.pos_src_ego_tensor self.pos_dst_ego_tensor = self.ego_flow.pos_dst_ego_tensor pos_src_emb = self.encoders['src'].encode(self.pos_src_ego_tensor) pos_dst_emb = self.pos_dst_ego_tensor.src.ids # use sampled softmax self.loss = self._unsupervised_loss(pos_src_emb, pos_dst_emb) self.loss = self.loss[0] return self.loss, self.iterator
def build(self): ego_flow = gl.EgoFlow( self._sample_seed, self._positive_sample, self._receptive_fn, self.ego_spec, dst_ego_spec=self.ego_spec, # h**o graph. negative_sample=self._negative_sample) iterator = ego_flow.iterator pos_src_ego_tensor = ego_flow.pos_src_ego_tensor pos_dst_ego_tensor = ego_flow.pos_dst_ego_tensor neg_dst_ego_tensor = ego_flow.neg_dst_ego_tensor pos_src_emb = self.encoders['src'].encode(pos_src_ego_tensor) pos_dst_emb = self.encoders['dst'].encode(pos_dst_ego_tensor) neg_dst_emb = self.encoders['dst'].encode(neg_dst_ego_tensor) loss = self._unsupervised_loss(pos_src_emb, pos_dst_emb, neg_dst_emb) loss = loss[0] return loss, iterator