예제 #1
0
    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
예제 #2
0
    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
예제 #3
0
 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
예제 #4
0
 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
예제 #5
0
 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
예제 #6
0
    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
예제 #7
0
    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
예제 #8
0
    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
예제 #9
0
  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
예제 #10
0
    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