Example #1
0
    def __init__(self, mlp_layers, N, f_dict):
        """
        Simpler version of the alternating model. In this model there is no
        encoder network, we only have 1 layer of GNN on each processing step.

        We condition on the output global embedding from the processing on the
        previous graph, and we only condition the node computations since there
        are less nodes than edges (this is a choice that can be discussed).

        We aggregate nodes with attention in the global model.

        We use the same gnn for processing both inputs.
        In this model, since we may want to chain the passes, we let the number
        of input features unchanged.
        """
        super(AlternatingSimple, self).__init__(f_dict)
        model_fn = gn.mlp_fn(mlp_layers)
        self.N = N
        self.component = 'MPGNN'
        # f_e, f_x, f_u, f_out = self.get_features(f_dict)

        self.gnn = gn.GNN(
            gn.EdgeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fe),
            gn.NodeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fx),
            gn.GlobalModel_NodeOnly(self.fx, 2 * self.fu, model_fn, self.fu))

        self.mlp = model_fn(2 * self.fu, self.fout)
Example #2
0
    def __init__(self, mlp_layers, N, f_dict):
        super(DeepSetPlus_A, self).__init__(f_dict)
        self.N = N  # we allow multiple rounds
        mlp_fn = gn.mlp_fn(mlp_layers)

        self.deepset = gn.DeepSetPlus(
            gn.DS_NodeModel(self.fx, self.fu, mlp_fn, self.fx),
            gn.DS_GlobalModel_A(self.fx, self.fu, self.h, mlp_fn, self.fu))
        self.mlp = mlp_fn(self.fu, self.fout)
Example #3
0
    def __init__(self, mlp_layers, N, f_dict):
        super(RecurrentGraphEmbeddingDS, self).__init__(f_dict)
        self.N = N
        model_fn = gn.mlp_fn(mlp_layers)
        self.component = 'DS'

        self.ds1 = gn.DeepSet(model_fn, self.h, self.h, self.h)
        self.ds2 = gn.DeepSet(model_fn, 2 * self.h, self.h, self.h)
        self.mlp = model_fn(self.h, self.fout)
Example #4
0
    def __init__(self, mlp_layers, N, f_dict):
        super(GNN_NEAgg, self).__init__(f_dict)
        self.N = N
        mlp_fn = gn.mlp_fn(mlp_layers)

        self.gnn = gn.GNN(
            gn.EdgeModel(self.fe, self.fx, self.fu, mlp_fn, self.fe),
            gn.NodeModel(self.fe, self.fx, self.fu, mlp_fn, self.fx),
            gn.GlobalModel(self.fe, self.fx, self.fu, mlp_fn, self.fx))
        self.mlp = mlp_fn(self.fu, self.fout)
Example #5
0
    def __init__(self, mlp_layers, N, f_dict):
        super(AlternatingDoubleDS, self).__init__(f_dict)
        model_fn = gn.mlp_fn(mlp_layers)
        self.N = N
        self.component = 'DS'
        # f_e, f_x, f_u, f_out = self.get_features(f_dict)

        self.ds1 = gn.DeepSet(model_fn, self.fu + self.fx, self.h, self.fx)
        self.ds2 = gn.DeepSet(model_fn, self.fu + self.fx, self.h, self.fx)

        self.mlp = model_fn(2 * self.fu, self.fout)
Example #6
0
    def __init__(self, mlp_layers, N, f_dict):
        super(N_GNN_A, self).__init__(f_dict)
        self.N = N
        mlp_fn = gn.mlp_fn(mlp_layers)

        self.gnn = gn.N_GNN(
            gn.EdgeModel_NoMem(self.fx, self.fu, mlp_fn, self.fe),
            gn.NodeModel_A(self.fe, self.fx, self.fu, self.h, mlp_fn, self.fx),
            gn.GlobalModel_NodeOnly_A(self.fx, self.fu, self.h, mlp_fn,
                                      self.fx))
        self.mlp = mlp_fn(self.fu, self.fout)
Example #7
0
    def __init__(self, mlp_layers, N, f_dict):
        super(AlternatingSimplev2, self).__init__(f_dict)
        model_fn = gn.mlp_fn(mlp_layers)
        self.N = N
        self.component = 'MPGNN'

        self.proj = torch.nn.Linear(self.fx, self.h)
        self.gnn = gn.GNN(
            gn.EdgeModel(self.h, self.h, 2 * self.h, model_fn, self.h),
            gn.NodeModel(self.h, self.h, 2 * self.h, model_fn, self.h),
            gn.GlobalModel_NodeOnly(self.h, 2 * self.h, model_fn, self.h))
        self.mlp = model_fn(2 * self.h, self.fout)
Example #8
0
    def __init__(self, mlp_layers, N, f_dict):
        super(AlternatingSimple, self).__init__(f_dict)
        model_fn = gn.mlp_fn(mlp_layers)
        self.N = N
        self.component = 'RDS'
        # f_e, f_x, f_u, f_out = self.get_features(f_dict)

        self.gnn = gn.DeepSetPlus(
            gn.DS_NodeModel(self.fx, 2 * self.fu, model_fn, self.fx),
            gn.DS_GlobalModel(self.fx, 2 * self.fu, model_fn, self.fu))

        self.mlp = model_fn(2 * self.fu, self.fout)
Example #9
0
    def __init__(self, mlp_layers, N, f_dict):
        super(RecurrentGraphEmbeddingRDS, self).__init__(f_dict)
        self.N = N
        model_fn = gn.mlp_fn(mlp_layers)
        self.component = 'RDS'

        self.gnn1 = gn.DeepSetPlus(
            gn.DS_NodeModel(self.fx, self.fu, model_fn, self.fx),
            gn.DS_GlobalModel(self.fx, self.fu, model_fn, self.fu))
        self.gnn2 = gn.DeepSetPlus(
            gn.DS_NodeModel(self.fx, 2 * self.fu, model_fn, self.fx),
            gn.DS_GlobalModel(self.fx, 2 * self.fu, model_fn, self.fu))
        self.mlp = model_fn(self.fu, self.fout)
Example #10
0
    def __init__(self, mlp_layers, N, f_dict):
        super(RecurrentGraphEmbeddingRDSv2, self).__init__(f_dict)
        model_fn = gn.mlp_fn(mlp_layers)
        self.N = N
        self.component = 'RDS'

        self.proj = torch.nn.Linear(self.fx, self.h)
        self.gnn1 = gn.DeepSetPlus(
            gn.DS_NodeModel(self.h, self.h, model_fn, self.h),
            gn.DS_GlobalModel(self.h, self.h, model_fn, self.h))
        self.gnn2 = gn.DeepSetPlus(
            gn.DS_NodeModel(self.h, 2 * self.h, model_fn, self.h),
            gn.DS_GlobalModel(self.h, 2 * self.h, model_fn, self.h))
        self.mlp = model_fn(self.h, self.fout)
Example #11
0
    def __init__(self, mlp_layers, N, f_dict):
        super(RecurrentGraphEmbedding, self).__init__(f_dict)
        self.N = N
        model_fn = gn.mlp_fn(mlp_layers)
        self.component = 'MPGNN'

        self.gnn1 = gn.GNN(
            gn.EdgeModel(self.fe, self.fx, self.fu, model_fn, self.fe),
            gn.NodeModel(self.fe, self.fx, self.fu, model_fn, self.fx),
            gn.GlobalModel_NodeOnly(self.fx, self.fu, model_fn, self.fx))
        self.gnn2 = gn.GNN(
            gn.EdgeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fe),
            gn.NodeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fx),
            gn.GlobalModel_NodeOnly(self.fx, 2 * self.fu, model_fn, self.fx))
        self.mlp = model_fn(self.fu, self.fout)
Example #12
0
    def __init__(self, mlp_layers, N, f_dict):
        super(AlternatingDoubleRDSv2, self).__init__(f_dict)
        model_fn = gn.mlp_fn(mlp_layers)
        self.N = N
        self.component = 'RDS'
        # f_e, f_x, f_u, f_out = self.get_features(f_dict)

        self.proj = torch.nn.Linear(self.fx, self.h)
        self.gnn1 = gn.DeepSetPlus(
            gn.DS_NodeModel(self.h, 2 * self.h, model_fn, self.h),
            gn.DS_GlobalModel(self.h, 2 * self.h, model_fn, self.h))
        self.gnn2 = gn.DeepSetPlus(
            gn.DS_NodeModel(self.h, 2 * self.h, model_fn, self.h),
            gn.DS_GlobalModel(self.h, 2 * self.h, model_fn, self.h))

        self.mlp = model_fn(2 * self.h, self.fout)
Example #13
0
    def __init__(self, mlp_layers, N, f_dict):
        super(RecurrentGraphEmbeddingv2, self).__init__(f_dict)
        self.N = N
        self.component = 'MPGNN'
        model_fn = gn.mlp_fn(mlp_layers)

        self.proj = torch.nn.Linear(self.fx, self.h)

        self.gnn1 = gn.GNN(
            gn.EdgeModel(self.h, self.h, self.h, model_fn, self.h),
            gn.NodeModel(self.h, self.h, self.h, model_fn, self.h),
            gn.GlobalModel_NodeOnly(self.h, self.h, model_fn, self.h))
        self.gnn2 = gn.GNN(
            gn.EdgeModel(self.h, self.h, 2 * self.h, model_fn, self.h),
            gn.NodeModel(self.h, self.h, 2 * self.h, model_fn, self.h),
            gn.GlobalModel_NodeOnly(self.h, 2 * self.h, model_fn, self.h))
        self.mlp = model_fn(self.h, self.fout)
Example #14
0
    def __init__(self, mlp_layers, N, f_dict):
        super(AlternatingDouble, self).__init__(f_dict)
        model_fn = gn.mlp_fn(mlp_layers)
        self.N = N
        self.component = 'MPGNN'
        # f_e, f_x, f_u, f_out = self.get_features(f_dict)

        self.gnn1 = gn.GNN(
            gn.EdgeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fe),
            gn.NodeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fx),
            gn.GlobalModel_NodeOnly(self.fx, 2 * self.fu, model_fn, self.fu))
        self.gnn2 = gn.GNN(
            gn.EdgeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fe),
            gn.NodeModel(self.fe, self.fx, 2 * self.fu, model_fn, self.fx),
            gn.GlobalModel_NodeOnly(self.fx, 2 * self.fu, model_fn, self.fu))

        self.mlp = model_fn(2 * self.fu, self.fout)
Example #15
0
 def __init__(self, mlp_layers, N, f_dict):
     super(DeepSet, self).__init__(f_dict)
     mlp_fn = gn.mlp_fn(mlp_layers)
     self.deepset = gn.DeepSet(mlp_fn, self.fx, self.h, self.fout)
Example #16
0
 def __init__(self, mlp_layers, N, f_dict):
     super(TGNN, self).__init__(f_dict)
     self.N = N
     mlp_fn = gn.mlp_fn(mlp_layers)
     self.tgnn = gn.MultiHeadAttention(self.fx, 8, self.h)
     self.agg = gn.SumAggreg()