Yes, I also thought the imbalance would lead the model to predict more negative cases than positive ones.
In my case I use a graph variational auto-encoder (GVAE) to reconstruct an adjacency matrix (link prediction task). Therefore the loss function is the sum of 2 terms: the BCE loss (reconstruction term) and the KL divergence (regularisation term).
Here’s the implementation of the loss function:
def loss_function(preds, labels, mu, logvar, n_nodes, pos_weight):

    BCE_loss = F.binary_cross_entropy_with_logits(preds, labels, pos_weight=pos_weight)
    KLD_loss = -0.5 / n_nodes * torch.mean(torch.sum(1 + 2 * logvar - mu.pow(2) - logvar.exp().pow(2), 1))

    return BCE_loss + KLD_loss

I get a balanced accuracy=0.5, F1score=0.33 and the confusion matrix is tn=0, fp=1, fn=0, tp=1. The code to compute these metrics is:
p = np.array([1 if  p>0.5 else 0 for p in preds_all]).reshape((-1,1))
y = labels_all.reshape((-1,1))
c = confusion_matrix(y, p, normalize='true')
tn, fp, fn, tp = c.ravel()
balanced_acc = (tp+tn)/2
f1_sco = f1_score(y, p, average='weighted')

I tried several values for pos_weight and still get the same results.
Also, the AUC and AP scores are very high in the first epochs:
Screenshot 2020-06-05 at 12.34.571708×446 88.4 KB
Thanks again for your help.