Thanks for the complete code.
I’ve added some minor changes to your code.
Could you compare the outputs of your Lua model and this one:
lass MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.linears = nn.ModuleList([nn.Linear(14, 42) for _ in range(12)])
        
        self.extras = nn.Sequential(
            nn.Linear(5, 15),
        ) 
        
        self.reseau = nn.Sequential(
            nn.Linear(14*12*3 + 15, 780),    # 519 = 12*42 + 15
            nn.PReLU(),
            nn.Linear(780, 520),
            nn.PReLU(),
            nn.Linear(520, 160),
            nn.Tanh(),
            nn.Linear(160, 12),            
        )

    def forward(self, x1,x2):
        outs = []
        for i, l in enumerate(self.linears):
            outs.append(self.linears[i](x1[:, i]))
        outs = torch.cat(outs, dim=1) # [batch_size, 504]
           
        x2 = self.extras(x2)        
        x = torch.cat((outs, x2),dim=1) # [batch_size, 519]
        x = self.reseau(x)     
        return x
    
model = MyModel()

batch_size = 5
x1 = torch.randn(batch_size, 12, 14)
x2 = torch.randn(batch_size, 5)

out = model(x1, x2)