深度学习——分类任务损失函数
一、多分类任务损失函数
1.定义
在多分类任务通常使用softmax将logits转换为概率的形式,所以多分类的交叉熵损失也叫做softmax损失,它的计算方法是:
\[\mathcal{L} = -\sum_{i=1}^{n} \mathbf{y}_i \log\big(S\big(f_\theta(\mathbf{x}_i)\big)\big)
\]
其中:
- \(\mathbf{y}\)是样本\(\mathbf{x}\)属于某一个类别的真实概率(0或1)
- 而\(f(\mathbf{x})\)是样本属于某一类别的预测分数
- \(S\)是softmax激活函数,将属于某一类别的预测分数转换成概率
- \(\mathcal{L}\)用来衡量真实值\(\mathbf{y}\)和预测值\(f(\mathbf{x})\)之间差异性的损失结果
2.代码实现
2.1 导包
import torch
import torch.nn as nn
2.2 定义函数,演示:多分类交叉熵损失
def dm01():
# 1. 手动创建样本的真实值——>上述公式中的y
y_true = torch.tensor(data = [[0,1,0],[1,0,0]],dtype=torch.float)
# 2. 手动创建样本的预测值 ——>上述中的f(x)
y_pred = torch.tensor(data = [[0.1,0.8,0.1],[0.7,0.2,0.1]],requires_grad=True,dtype=torch.float)
# 3. 创建多分类交叉熵损失函数.
criterion = nn.CrossEntropyLoss() # 计算的平均损失,来源于参数:reduction:str = "mean"
# 4. 计算损失值
loss = criterion(y_true, y_pred)
print(f'损失值:{loss}')
2.3 测试
if __name__ == '__main__':
dm01()
二、二分类任务损失函数
1.定义
在处理二分类任务时,我们不再使用softmax激活函数,而是使用sigmoid激活函数,那损失函数也相应的进行调整,使用二分类的交叉熵损失函数:
\[L = -y \log \hat{y} - (1 - y) \log(1 - \hat{y})
\]
其中:
- \(y\)是样本\(x\)属于某一个类别的真实概率
- 而\(\hat{y}\)是样本属于某一类别的预测概率
- \(L\)用来衡量真实值\(y\)与预测值\(\hat{y}\)之间差异性的损失结果。
在pytorch中实现时使用nn.BCELoss(),如下所示:
2. 代码实现
# 1. 手动创建样本的真实值——>上述公式中的y
y_true = torch.tensor(data = [0,1,0],dtype=torch.float)
# 2. 手动创建样本的预测值 ——>上述中的f(x)(这里给出的数据就是概率,不用sigmoid了)
y_pred = torch.tensor(data = [0.6901,0.5423,0.2639],requires_grad=True,dtype=torch.float)
# 3. 创建二多分类交叉熵损失函数.
criterion = nn.BCELoss() # 计算的平均损失,来源于参数:reduction:str = "mean"
# 4. 计算损失值
loss = criterion(y_pred,y_true).detach().numpy()
print(f'损失值:{loss}')

浙公网安备 33010602011771号