Hi Sebastian,
there are some minor issues in your code for LogisticRegression3.
By default, BCELoss calculates the loss by averaging over observations of the batch.
Since you are not doing it in the other examples, you can disable it with:
cost_fn = torch.nn.BCELoss(size_average=False)

Also, you have probably a typo in the last line:
print(' | Cost: %.3f' % cost_fn(out, y_train_var))

should be
print(' | Cost: %.3f' % cost_fn(pred_probas, y_train_var))

Using these changes, I get the same result as for the other implementations:
Model parameters:
  Weights: 
 3.5362  3.0126
[torch.FloatTensor of size 1x2]

  Bias: 
-1.4038
[torch.FloatTensor of size 1]