Here is the code:
class MyEnsemble(nn.Module):
    def __init__(self, model_1, model_2, model_3, model_4, model_5, model_6, model_7,nb_classes):
        super(MyEnsemble,self).__init__()
        self.model_1   = model_1 
        self.model_2   = model_2 
        self.model_3  = model_3  
        self.model_4     = model_4
        self.model_5  = model_5
        self.model_6 = model_6 
        self.model_7    = model_7
        
        #Now Remove the Last layer
        self.model_1    = nn.Identity() 
        self.model_2   = nn.Identity() 
        self.model_3  = nn.Identity() 
        self.model_4     = nn.Identity()
        self.model_5  = nn.Identity() 
        self.model_6 = nn.Identity() 
        self.model_7    = nn.Identity() 
        
        
        #Now We  a head on top of those models
        # The trained model I am passing here is binary type based on densenet169
        # so I added a sequential `nn.Linear(num_ftrs, 2)` with them for output when they were trained
        # so, sould I use 2 instead of 1664 ? but used 1664 any way. 
        self.classifier = nn.Linear(1664+1664+1664+1664+1664+1664+1664,nb_classes)
    
    
    def forward(self, x):
        x1 = self.model_1(x.clone())  # clone to make sure x is not changed by inplace methods
        x1 = x1.view(x1.size(0), -1)
        
        x2 = self.model_2(x)
        x2 = x2.view(x2.size(0), -1)
        
        x3 = self.model_3(x)
        x3 = x3.view(x3.size(0), -1)
        
        x4 = self.model_4(x)
        x4 = x4.view(x4.size(0), -1)
        
        x5 = self.model_5(x)
        x5 = x5.view(x5.size(0), -1)
        
        x6 = self.model_6(x)
        x6 = x6.view(x6.size(0), -1)
        
        x7 = self.model_7(x)
        x7 = x7.view(x7.size(0), -1)
        
        
        #final
        x = torch.cat((x1, x2, x3, x4, x5, x6, x7), dim=1)
        x = self.classifier(F.relu(x))
        
        return x