Example #1
0
    def __init__(self, c, args):  #, use_cnn
        super(HGCAE, self).__init__(c, use_cnn=True)
        self.manifold = getattr(manifolds, args.manifold)()
        assert args.num_layers > 0
        dims, acts, self.curvatures = hyp_layers.get_dim_act_curv(args)
        if args.c_trainable == 1:
            self.curvatures.append(
                nn.Parameter(torch.Tensor([args.c]).to(args.device)))
        else:
            self.curvatures.append(torch.tensor([args.c]).to(args.device))
        hgc_layers = []
        for i in range(len(dims) - 1):
            c_in, c_out = self.curvatures[i], self.curvatures[i + 1]
            in_dim, out_dim = dims[i], dims[i + 1]
            act = acts[i]

            hgc_layers.append(
                hyp_layers.HyperbolicGraphConvolution(self.manifold,
                                                      in_dim,
                                                      out_dim,
                                                      c_in,
                                                      c_out,
                                                      args.dropout,
                                                      act,
                                                      args.bias,
                                                      args.use_att,
                                                      att_type=args.att_type,
                                                      att_logit=args.att_logit,
                                                      beta=args.beta))
        self.layers = nn.Sequential(*hgc_layers)
        self.encode_graph = True
Example #2
0
    def __init__(self, c, args, task):
        super(HGCAEDecoder, self).__init__(c)
        self.manifold = getattr(manifolds, args.manifold)()
        if task == 'nc':
            self.input_dim = args.dim
            self.output_dim = args.n_classes
            self.bias = args.bias
            self.classifier = Linear(self.input_dim, self.output_dim, args.dropout, lambda x: x, self.bias)
            self.decode_adj = False

        elif task == 'rec':
            assert args.num_layers > 0

            dims, acts, _ = hyp_layers.get_dim_act_curv(args)
            dims = dims[::-1]
            acts = acts[::-1][:-1] + [lambda x: x] # Last layer without act
            self.curvatures = self.c[::-1]

            encdec_share_curvature = False
            if not encdec_share_curvature and args.num_layers == args.num_dec_layers: # do not share and enc-dec mirror-shape
                num_c = len(self.curvatures)
                self.curvatures = self.curvatures[:1] 
                if args.c_trainable == 1:
                    self.curvatures += [nn.Parameter(torch.Tensor([args.c]).to(args.device))] * (num_c - 1)
                else:
                    self.curvatures += [torch.tensor([args.c])] * (num_c - 1)
                    if not args.cuda == -1:
                        self.curvatures = [curv.to(args.device) for curv in self.curvatures]


            self.curvatures = self.curvatures[:-1] + [None]


            hgc_layers = []
            num_dec_layers = args.num_dec_layers
            for i in range(num_dec_layers):
                c_in, c_out = self.curvatures[i], self.curvatures[i + 1]
                in_dim, out_dim = dims[i], dims[i + 1]
                act = acts[i]
                hgc_layers.append(
                    hyp_layers.HyperbolicGraphConvolution(
                            self.manifold, in_dim, out_dim, c_in, c_out, args.dropout, act, args.bias, args.use_att,
                            att_type=args.att_type, att_logit=args.att_logit, beta=args.beta, decode=True
                    )
                )

            self.decoder = nn.Sequential(*hgc_layers)
            self.decode_adj = True
        else:
            raise RuntimeError('Unknown task')
Example #3
0
    def __init__(self, c, args):
        super(HGCF, self).__init__(c)
        self.manifold = getattr(manifolds, "Hyperboloid")()
        assert args.num_layers > 1

        hgc_layers = []
        in_dim = out_dim = args.embedding_dim
        hgc_layers.append(
            hyp_layers.HyperbolicGraphConvolution(
                self.manifold, in_dim, out_dim, self.c, args.network, args.num_layers
            )
        )
        self.layers = nn.Sequential(*hgc_layers)
        self.encode_graph = True
Example #4
0
 def __init__(self,
              manifold,
              c=1.,
              input_dim=10,
              hidden_dim=16,
              edge_dim=0,
              num_layers=2,
              dropout=0.05,
              use_bias=True,
              use_att=True,
              agg_direction='in',
              **kwargs):
     super(HGCN, self).__init__()
     self.manifold = manifold
     assert num_layers > 1
     c = torch.tensor([c]).float()
     dims, acts, curvatures = get_dim_act_curv(input_dim=input_dim,
                                               hidden_dim=hidden_dim,
                                               num_layers=num_layers)
     curvatures.append(c)
     self.curvatures = []
     for i, curv in enumerate(curvatures):
         curv = nn.Parameter(curv)
         self.register_parameter("c_{}".format(i), curv)
         self.curvatures.append(manifolds.Curvature(curv))
     # https://github.com/HazyResearch/hgcn/blob/25a3701f8dfbab2341bc18091fedcb0e9bf61395/models/base_models.py#L27
     hgc_layers = []
     for i in range(len(dims) - 1):
         c_in, c_out = self.curvatures[i], self.curvatures[i + 1]
         in_dim, out_dim = dims[i], dims[i + 1]
         act = acts[i]
         hgc_layers.append(
             hyp_layers.HyperbolicGraphConvolution(
                 manifold=self.manifold,
                 in_features=in_dim,
                 out_features=out_dim,
                 edge_dim=edge_dim,
                 c_in=c_in,
                 c_out=c_out,
                 dropout=dropout,
                 act=act,
                 use_bias=use_bias,
                 use_att=use_att,
                 agg_direction=agg_direction))
     self.layers = nn.Sequential(*hgc_layers)
     self.encode_graph = True
Example #5
0
 def __init__(self, c, args):
     super(HGCN, self).__init__(c)
     self.manifold = getattr(manifolds, args.manifold)()
     assert args.num_layers > 1
     dims, acts, self.curvatures = hyp_layers.get_dim_act_curv(args)
     self.curvatures.append(self.c)
     hgc_layers = []
     for i in range(len(dims) - 1):
         c_in, c_out = self.curvatures[i], self.curvatures[i + 1]
         in_dim, out_dim = dims[i], dims[i + 1]
         act = acts[i]
         hgc_layers.append(
             hyp_layers.HyperbolicGraphConvolution(self.manifold, in_dim,
                                                   out_dim, c_in, c_out,
                                                   args.dropout, act,
                                                   args.bias))
     self.layers = nn.Sequential(*hgc_layers)
     self.encode_graph = True