multi-target not supporte
原因:
input和labels的维度:
[32,751] [32,1]
labels多了一个维度
解决:
conf.ce_loss(thetas, labels.squeeze(1))
FocalLoss:
交叉熵损失函数CrossEntropyLoss可以支持多分类,并且不需要one-hot。
下面是源码:
class FocalLoss(nn.Module):
def __init__(self, gamma=0):
super(FocalLoss, self).__init__()
self.gamma = gamma
self.ce = torch.nn.CrossEntropyLoss()
def forward(self, input, target):
logp = self.ce(input, target)
p = torch.exp(-logp)
loss = (1 - p) ** self.gamma * logp
return loss.mean()