以下仅为个人理解,如有不正之处还请指出,欢迎交流!
1.pytorch中的交叉熵损失函数如下:
torch.nn.functional.cross_entropy(input, target, weight=None, size_average=None, ignore_index=-100, reduce=None, reduction='mean')
损失函数即反映了预测值(input)和真实值(target)之间的差异。通过训练使loss收敛,以达到预测值能够很好地反映真实值的目的。
2.在实际使用中得到的预测值与真实值
假设有A、B两类待检测目标,加上背景共3类,则得到如下预测结果:
tensor([[-0.0295, -0.0632, 0.0223],
[ 0.0209, 0.3975, 0.3867],
[ 0.1598, 0.2521, 0.2419],
...,
[ 0.1016, 0.4608, 0.4940],
[-0.1843, 0.3046, 0.0909],
[-0.1861, 0.3968, 0.5257]])
对应真实值如下:
tensor([2, 1, 1,..., 0, 0, 0])
可见,对每一个候选框对应得到一个包含3个元素的预测结果,其真实值对应0(背景)、1(A类)、2(B类)。
3.Softmax函数表达式
在理解交叉熵损失函数之前,需要明确softmax函数,其表达式如下:
以上方数值为例,第一个目标标签真实值为2对应B类,其对应的预测概率为:
其余同理,且3个类别的预测概率总和为1
另,如需单独调用,接口如下:
torch.nn.functional.softmax(input, dim=None, _stacklevel=3, dtype=None)
4.理解交叉熵损失函数
其计算表达式为:
其中,p表示真实值,为one-hot向量;q为对应经过上文softmax之后的预测概率
由于one-hot向量中的元素不是1就是0,所以可将交叉熵损失的表达式简化为:
其中,
为真实值对应类别的预测概率
综上,交叉熵损失函数的计算方式为: