深度学习——分类任务损失函数

一、多分类任务损失函数

1.定义

在多分类任务通常使用softmax将logits转换为概率的形式,所以多分类的交叉熵损失也叫做softmax损失,它的计算方法是:

\[\mathcal{L} = -\sum_{i=1}^{n} \mathbf{y}_i \log\big(S\big(f_\theta(\mathbf{x}_i)\big)\big) \]

其中:

  1. \(\mathbf{y}\)是样本\(\mathbf{x}\)属于某一个类别的真实概率(0或1)
  2. \(f(\mathbf{x})\)是样本属于某一类别的预测分数
  3. \(S\)是softmax激活函数,将属于某一类别的预测分数转换成概率
  4. \(\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}) \]

其中:

  1. \(y\)是样本\(x\)属于某一个类别的真实概率
  2. \(\hat{y}\)是样本属于某一类别的预测概率
  3. \(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}')
posted @ 2026-07-14 16:16  王新文  阅读(4)  评论(0)    收藏  举报