在确定检测任务和模型构建完成后,随之需要对训练的准则Criterion进行实现,可称之为损失函数或代价函数,简明而言,训练过程中真实值和计算值的误差。
分割常见的损失函数如下
- cross entropy loss:交叉熵,通用于不同类样本量在一个量级的任务;
- focal loss:交叉熵的改进版本,增加两个权重,聚焦不平衡样本任务;
- dice loss:样本极不平衡可用,反向梯度值太大,训练不稳定;
- iou loss:较多见于目标检测任务的回归任务;
cross entropy loss
直接调用函数
seg_loss = torch.nn.CrossEntropyLoss()
根据公式复现
class SimpleCrossEntropyLoss(nn.Module):
# H(p,p)=p*log(q)
def __init__(self):
super().__init__()
self.logsoftmax_func = nn.LogSoftmax(dim=1)
# torch.log(torch.nn.Softmax(dims=1)(inputs))
self.nllloss_func = nn.NLLLoss()
pass
def forward(self, inputs, target):
x = self.logsoftmax_func(inputs)
loss = self.nllloss_func(x, target)
return loss
pass
seg_loss = SimpleCrossEntropyLoss()
nn.NLLLoss()实现举例
令 ,一维二维计算示例如下。