torch.argmax(output, dim=1) is usually used on outputs containing the logits (or probabilities) with nb_classes in dim1 (i.e. in the shape [batch_size, nb_classes]), which would be the case for a multi-class classification using nn.CrossEntropyLoss.
In your case you are using a single output unit, apply sigmoid on it, and use nn.BCELoss as the criterion, which points towards a binary classification (small advice: remove the sigmoid and use nn.BCEWithLogitsLoss for more numerical stability).
In that case you should use a threshold to get the predicated class labels, e.g. via:
preds = out > 0.0 # if out contains logits
preds = torch.sigmoid(out) > 0.5 # since out now contains probabilities