(multi-label classification) Why does my model return the same predictions for each label?

I can’t figure out where I’ve gone wrong, but I get the same predictions for label in my multi-label classification model.

This

b = next(iter(md.val_dl))
p = m(V(b[0]))

returns this (the first set of values are the predictions for my first 5 examples and underneath it is the actual values of those 5 rows):

p[:5], b[1][:5]

(Variable containing:
  0.1160  0.0144  0.0654  0.0051  0.0567  0.0088  0.8777
  0.1160  0.0144  0.0654  0.0051  0.0567  0.0088  0.8777
  0.1160  0.0144  0.0654  0.0051  0.0567  0.0088  0.8777
  0.1160  0.0144  0.0654  0.0051  0.0567  0.0088  0.8777
  0.1160  0.0144  0.0654  0.0051  0.0567  0.0088  0.8777
 [torch.cuda.FloatTensor of size 5x7 (GPU 0)], Variable containing:
     1     0     0     0     0     1     0
     0     0     0     0     0     0     1
     0     0     0     0     0     0     1
     1     0     1     0     1     0     0
     0     0     0     0     0     0     1
 [torch.cuda.FloatTensor of size 5x7 (GPU 0)])

My custom model’s forward function looks like this (I can show more but don’t want to unnecessarily clutter things):

def forward(self, words):
    bsz = words[0].size(0)
    if (self.h[0].size(1) != bsz): self.h = self.init_hidden(bsz)
    
    x, h = self.rnn(self.e(words), self.h)
    self.h = repackage_var(h)

    x = x[-1]

    for l, d, b in zip(self.linears, self.linear_drops, self.linear_bns):
        x = F.relu(l(x))
        if (self.use_bn): x = b(x)
        x = d(x)

    x = self.outp(x)

    return F.sigmoid(x)

and I fit it as such:

m = LstmClassifier(md.nt, n_fac, bsz, [512, 256], [0.1, 0.1],
                   n_hidden, n_lstm_layers=2, out_sz=md.c, is_multi=True, use_bn=False).cuda()

lo = LayerOptimizer(optim.Adam, m, 1e-3, 1e-4)

fit(m, md, 1, lo.opt, F.binary_cross_entropy)

Any ideas where I’ve gone wrong?