I am trying to build an ensemble of graph convolution models. However, when training, the performance is very poor.
Is there anything wrong with my code?
class MyEnsemble(nn.Module):
    def __init__(self, params, device='cpu'):
        super(MyEnsemble, self).__init__()
        self.model_1= GCNNet(params.in_dim1,params.hidden_dim1,params.readout, device)
        self.model_2 = GCNNet(params.in_dim2,params.hidden_dim2,params.readout,device)
        # Output layer
        self.out = nn.Linear(params.hidden_dim1[-1]+params.hidden_dims2[-1], params.n_classes)# in_dim = concat(data1,data2) 
        
        self.device = device
        if self.device != "cpu":
            self.cuda()
            
    def forward(self, x_1, x_2):# x_1 and x_2: graph data
        x1 = self.model_1.forward(x_1.clone())  # clone to make sure x is not changed by inplace 
        x2 = self.model_2.forward(x_2.clone())
        x = torch.cat((x1, x2), dim=1) # concatenate model_1 and model_2 readout layers
        output= F.softmax(self.out(x), dim=1)
        return output
    
    def loss(self, pred, label):
        criterion = nn.CrossEntropyLoss()
        loss = criterion(pred, label)
        return loss