HI, thanks for the code sample, I used it as a starting point for my Noyebooke and added those features:

Train test split, like sk- learn train_test_split
Visualization of the training and validation sets
Code runs automatically on the GPU if such a device exists and the CPU

Now I have several questions:

If this is a multi-label classification problem, why are you returning F.sigmoid(x) in your Net() class and not 'F.log_softmax(x)` ?
Shouldnt you be using  MultiLabelMarginLoss or MultiLabelSoftMarginLoss as the loss function instead of F.binary_cross_entropy?

Thanks,