If your target is a multi-hot encoded tensor, then your changes should work.
I’m currently unsure, if label is a tensor or if it contains the class names as given in the data frame.
Anyway, for a multi-label classification, your target should have the same output shape as the model’s output, containing ones for each active class.
Also, as you already explained, nn.BCELoss expects a sigmoid input.