About weighted BCELoss

  1. Most likely your model is predicting the majority class only, so I guess it’s predicting the False class. You can check it by printing the unique predictions for the datasets.

  2. You could use nn.BCEWithLogitsLoss, remove the sigmoid, and set the pos_weight as number_negative_samples / number_positive_samples. If that doesn’t work, try to use WeightedRandomSampler as described here.

  3. see 2.

Also, note that the accuracy can be misleading for an imbalanced dataset as described in the Accuracy paradox.