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
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')
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
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
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