I cannot reproduce this issue using your code:

class Net(nn.Module):
    
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = nn.Conv2d(3, 16, 3)
        self.conv1a = nn.Conv2d(16, 16, 3)
        self.batch1 = nn.BatchNorm2d(16)
        self.pool1 = nn.MaxPool2d(2, 2) 
    
        self.conv2 = nn.Conv2d(16, 32, 3)
        self.conv2a = nn.Conv2d(32, 32, 3)
        self.batch2 = nn.BatchNorm2d(32)
        self.pool2 = nn.MaxPool2d(2, 2)
    
        self.conv3 = nn.Conv2d(32, 64, 3)
        self.conv3a = nn.Conv2d(64, 64, 3)
        self.batch3 = nn.BatchNorm2d(64)
        self.pool3 = nn.MaxPool2d(2, 2)
    
        self.fc1 = nn.Linear(512, 128)
        self.fc2 = nn.Linear(128, 36)
        self.softmax = nn.Softmax(dim=1)
    
    def forward(self, x):
        x = F.relu(self.batch1(self.conv1(x)))
        x = F.relu(self.batch1(self.conv1a(x)))
        x = self.pool1(x)   
    
        x = F.relu(self.batch2(self.conv2(x)))
        x = F.relu(self.batch2(self.conv2a(x)))
        x = self.pool2(x)
    
        x = F.relu(self.batch3(self.conv3(x)))
        x = F.relu(self.batch3(self.conv3a(x)))
        x = self.pool3(x)
    
        x = x.view(-1,512)
    
        x1 = F.relu(self.fc1(x))
        x1 = F.relu(self.fc2(x1)) 
        x1 = self.softmax(x1)
    
        x2 = F.relu(self.fc1(x))
        x2 = F.relu(self.fc2(x2)) 
        x2 = self.softmax(x2)
    
        x3 = F.relu(self.fc1(x))
        x3 = F.relu(self.fc2(x3)) 
        x3 = self.softmax(x3)
    
        x4 = F.relu(self.fc1(x))
        x4 = F.relu(self.fc2(x4)) 
        x4 = self.softmax(x4)
    
        x5 = F.relu(self.fc1(x))
        x5 = F.relu(self.fc2(x5)) 
        x5 = self.softmax(x5)
    
        x6 = F.relu(self.fc1(x))
        x6 = F.relu(self.fc2(x6)) 
        x6 = self.softmax(x6)
    
        x7 = F.relu(self.fc1(x))
        x7 = F.relu(self.fc2(x7)) 
        x7 = self.softmax(x7)
    
        x8 = F.relu(self.fc1(x))
        x8 = F.relu(self.fc2(x8)) 
        x8 = self.softmax(x8)
        return x1,x2,x3,x4,x5,x6,x7,x8
    
model = Net()

x = torch.randn(2, 3, 50, 50)
out1, out2, out3, out4, out5, out6, out7, out8 = model(x)
loss = out1 + out2 + out3 + out4 + out5 + out6 + out7 + out8
loss = loss.mean()
loss.backward()

Note that I reduced the number of features a bit to debug it quickly.
Could you compare my code to yours and try to narrow down the difference?