交叉熵损失(Cross-Entropy Loss),也称为对数损失(Logarithmic Loss),是一种在分类问题中常用的损失函数。它衡量了模型预测的概率分布与实际标签之间的差异,用于衡量模型预测的准确程度。
在分类问题中,每个样本都有一个真实标签,通常表示为一个one-hot Encoding
一个位置是1,表示真实类别,其他位置都是0。交叉熵损失通过计算模型预测的概率分布与真实标签的概率分布的交叉熵来衡量模型的性能。
(1) 二分类
![](http://mhtbk.cn/wp-content/uploads/2024/04/image-4-1024x370.png)
(2)多分类
![](http://mhtbk.cn/wp-content/uploads/2024/04/image-5-1024x392.png)
BCE LOSS示例
>>> import torch
>>> output = torch.randn(3,3)
>>> output
tensor([[-0.8858, 0.3241, 0.9456],
[ 1.4887, 1.8076, -0.0565],
[-1.6529, -1.8539, 0.6756]])
首先将输出向量中的所有元素转换为[0, 1]之间的概率值
>>> active_func = nn.Sigmoid()
>>> output = active_func(output)
>>> output
tensor([[0.2920, 0.5803, 0.7202],
[0.8159, 0.8591, 0.4859],
[0.1607, 0.1354, 0.6627]])
假设输入数据对应的标签为
>>> target = torch.FloatTensor([[0,1,1],[1,1,1],[0,0,0]])
>>> target
tensor([[0., 1., 1.],
[1., 1., 1.],
[0., 0., 0.]])
使用BCE损失函数计算LOSS
>>> loss = nn.BCELoss()
>>> loss = loss(output, target)
>>> loss
tensor(0.4114)