折页损失函数代码实现
def hinge_loss(outputs, labels):
"""
折页损失计算
1、针对每个样本上对不同分类的分数,选择不是该样本真实分类的分数与该样本真实分类的分数进行比较,如果该分数大于1,小于真实分类上的分数,则loss为0
2、反之,该样本的loss为该分数加1再减去该样本在真实分类上的分数
3、对所有的样本都按照此方法进行计算得到每个样本的loss,然后将它们加在一起凑成总loss值,并除以样本数以求平均
:param outputs: 大小为(N, num_classes)
:param labels: 大小为(N) 样本真实分类标签
:return: 损失值
"""
num_labels = len(labels)
corrects = outputs[range(num_labels), labels].unsqueeze(0).T
# 最大间隔
margin = 1.0
margins = outputs - corrects + margin
loss = torch.sum(torch.max(margins, 1)[0]) / len(labels)
# # 正则化强度
# reg = 1e-3
# loss += reg * torch.sum(weight ** 2)
return loss