nn.Softmax(dim=1) will create an output, where output.sum(dim=1) returns ones as seen in your code snippet:
input = torch.nn.Softmax(1)(target)
print(input.sum(1))
> tensor([[1.0000, 1.0000, 1.0000, 1.0000],
          [1.0000, 1.0000, 1.0000, 1.0000],
          [1.0000, 1.0000, 1.0000, 1.0000]])

However, nn.BCELoss is used for a binary classification/segmentation or a multi-label classification/segmentation use case, where zero, one or multiple classes can be active per sample.
Based on your target it seems you are dealing with a multi-class classification, where only one class is active per sample.
In that case, you should use nn.CrossEntropyLoss, which expects raw logits as the model output and a target as a LongTensor containing the class indices in the range [0, nb_classes-1].
To create the target, use target = torch.argmax(target, dim=2).