I’m not sure we’re using terminology the same way:
multi-class: a sample can be one of N classes where N>2 (e.g. ImageNet1k)
multi-label: a sample can be labeled with more than one class (e.g. youtube8m video classification)


For multi-class (one ground truth label), softmax + cross entropy loss works well.
Use F.cross_entropy 143 / nn.CrossEntropyLoss 216


For multi-label (multiple ground truth labels), sigmoid + cross entropy per label works well.
Use F. binary_cross_entropy_with_logits 557 / nn.BCEWithLogitsLoss 435


I haven’t used triplet loss, but I’ve seen it used in open-ended classification problems like OpenFace. For ~200 labels, I suspect sigmoid + cross entropy will work better.


I’ve also seen the multi-label case treated as multi-class. Each time you sample, you treat one “ground truth” label as a positive everything else as negative. You can then use softmax instead of independent classifiers. This paper 99 does that for learning features from flickr100m hash tags. My guess is that if your metric is something like average precision (instead of good features for transfer learning), then (2) will work better.