当前位置: 首页 > news >正文

深度学习基础理论————常见评价指标以及Loss Function

评价指标

准确率/精确率/召回率

Positive (预测到的正例) Negative (预测到的反例)

True (预测结果为真) TP TN

False (预测结果为假) FP FN

争对正案例的计算:

1、准确率计算方式(ACC):

2、精确率计算方式(Precision):

3、召回率计算方式(Recall):

4、F1计算方式:

指标 优点 缺点

准确率 - 直观且易理解 - 在类别不平衡的情况下可能误导模型评估

精确率 - 衡量预测为正类的样本中,实际为正类的比例;适用于避免假阳性 - 可能忽视召回率,导致漏掉正类样本(假阴性)

召回率 - 衡量模型对正类样本的识别能力;适用于避免假阴性 - 可能导致精确率较低,增加误报(假阳性)

F1 分数 - 平衡精确率和召回率,适用于不平衡的任务 - 不能单独反映精确率或召回率,可能不适用于需要单独关注某一项的场景

BLEU

BLEU 采用一种N-gram的匹配规则,原理比较简单,就是比较译文和参考译文之间n组词的相似的一个占比

原文:今天天气不错

机器译文:It is a nice day today

人工译文:Today is a nice day

1-gram:

命中5个词,那么计算得到匹配度为:

3-gram:

计算得到匹配度为:

在通过结合召回率和惩罚因子之后得到BLEU计算公式为:

使用例子,直接使用第三方库sacrebleu

import sacrebleu

hyps = ['我有一个帽衫', '大大的帽子']

refs = ['你好,我有一个帽衫', '帽子大大的']

bleu = sacrebleu.corpus_bleu(hyps, [refs], tokenize='zh')

print(float(bleu.score))

# 59.809989126151606

Loss Function

Cross-Entropy Loss(交叉熵损失)

交叉熵损失用于分类任务,它度量的是预测概率分布与真实标签分布之间的差异。通常用于多分类问题。交叉熵损失公式(多分类)如下:

其中

为类别数量,

真实标签数据,

模型预测概率。二分类交叉熵损失为:

在pytorch中对于交叉熵损失函数主要参数:

1、label_smoothing (float, optional):通过平滑标签的方式来避免模型过度自信,提高模型的泛化能力并缓解类别不平衡问题的技术。假设模型有 C 个类别,标签为 y,真实标签的平滑值为 ε,则:对于真实类别 y = 1,标签值变为 1 - ε;对于其他类别 y ≠ 1,标签值变为 ε / (C - 1)

2、ignore_index (int, optional):忽略某些特定的标签,通常用于标记某些数据的特殊情况,如填充(padding)区域、无效标签或其他不需要参与损失计算的标签

3、reduction (str, optional):'none'、'mean' 和 'sum'分别表示对最后 不汇总、平均值、求和

4、weight:相当于在计算损失过程中给每一个标签额外补充一个权重

对于交叉熵损失计算从代码角度出发需要考虑的就是输入数据格式:

InputShape:

或者

。Target:

或者

其中 C代表类别,N代表batch_size。从数据格式上可以看出也就是保证N、C在同一维度即可

⭐值得注意的是,在pytorch的交叉熵损失里面已经计算了softmax/sigmoid,所以模型输出如果用交叉熵损失函数就不需要用softmax/sigmoid处理

Mean Squared Error(均方误差)

均方误差损失用于回归任务,度量预测值与真实值之间的差异。MSE 计算的是预测值和实际值的平方误差的平均值。MSE 公式:

其中

为类别数量,

真实标签数据,

模型预测概率。例子:比如说预测类别(假设为3),模型输出之后通过sigmoid/softmax处理之后得到:

预测 真实

0.3 0.3 0.4 0 0 1 (A)

0.3 0.4 0.3 0 1 0 (B)

0.1 0.2 0.7 1 0 0 (C)

均方误差计算:

交叉熵计算:

Focal Loss

Focal Loss主要用于处理样本失衡问题(样本里面标签不平衡问题,比如说分类任务标签大部分是类别A只有少部分是标签B),其原理也很简单可以直接在原交叉熵基础上补充一个 因子即可。

:调节因子,用于控制对易分类样本的惩罚程度。它是一个非负实数,通常设置为大于 0 的值。当

>0 时,随着

的增加,

的值会迅速减小,从而降低易分类样本的损失值。这样可以使得模型更加关注那些难以分类的样本。(换言之,如果样本里面大部分都是A那么计算得到

也就会越大,那么可以增加

值来减小这部分值对于损失值的影响)

: 平衡因子,用于调整正类和负类之间的权重。它是一个可调参数,通常设置为

对于正类和 1−

对于负类。当数据集中正负样本数量不均衡时,可以通过调整

来平衡两类样本的贡献。例如,在一个正负样本比例为 1:9 的数据集中,可以将

设置为 0.9,以增加正类样本的权重(一般而言对于这个参数直接使用我的标签权重即可)

import torch

import torch.nn as nn

import torch.nn.functional as F

class FocalLoss(nn.Module):

"""Focal Loss implementation."""

def __init__(self, gamma=1.5, alpha=0.25):

super().__init__()

self.gamma = gamma

self.alpha = alpha

def forward(self, pred, label, mask_labels=None):

"""Calculates focal loss with optional mask_labels."""

loss = F.binary_cross_entropy_with_logits(pred, label, reduction='none')

pred_prob = pred.sigmoid()

p_t = label * pred_prob + (1 - label) * (1 - pred_prob)

loss *= (1.0 - p_t) ** self.gamma

if self.alpha > 0:

loss *= label * self.alpha + (1 - label) * (1 - self.alpha)

if mask_labels is not None:

loss *= mask_labels.float()

return loss.sum() / mask_labels.sum()

return loss.mean()

if __name__ == '__main__':

h, w = 500, 500

labels_parent = torch.randint(0, 2, (h, w), dtype=torch.float32)

tmp_labels = torch.zeros(1000, 1000)

tmp_labels[:h, :w] = labels_parent

tmp_labels_mask = torch.zeros(1000, 1000)

tmp_labels_mask[:h, :w] = 1

pred = torch.randn(1, 1000, 1000)

focal_loss = FocalLoss()

loss = focal_loss(pred, tmp_labels.unsqueeze(0), tmp_labels_mask)

print(loss)

对于 FocalLoss另外一个改进为:CB Loss用于改进样本分布不均衡问题:

L1 loss

L1 loss:算预测值与真实值之间的绝对差值来衡量模型的预测误差,公式为:

Huber Loss

Huber Loss用于回归任务的损失函数,它结合了均方误差(MSE)和绝对误差(MAE)的优点,可以减少对异常值(outliers)的敏感性,同时保持较好的梯度性质

http://www.gsyq.cn/news/93903.html

相关文章:

  • 策知道|如何用3分钟读懂2026年政府工作报告?
  • 终极Python火焰图分析工具Pyflame完整使用指南
  • 灌肠机厂家综合实力排行榜,优质生产商盘点,国内灌肠机厂家综合实力与口碑权威评选 - 品牌推荐师
  • 高效FLARE-VM配置指南:搭建专业级逆向工程环境
  • 2025年12月变压器,骨架插针类变压器,骨架贴片类变压器厂商推荐:聚焦企业综合实力与核心竞争力 - 品牌鉴赏师
  • 汽车变速器电控系统Simulink模型:从原理到实现
  • 在 Yocto 中配置 OP-TEE 的工程优势
  • 深度学习python项目--垃圾图像分类识别 关键模型:VGG19DenseNet121Res...
  • PAT 1151 LCA in a Binary Tree
  • 快速上手shadcn-svelte:简单高效的Svelte组件库配置指南
  • [特殊字符]️ 深度解析我的 Overleaf 私有化部署:一份稳定、高兼容性的 `docker-compose.yaml`
  • 创客匠人峰会洞察:AI 时代教育知识变现的重构 —— 从 “刷题记忆” 到 “成长赋能” 的革命
  • Milkdown编辑器终极指南:如何选择最适合你的Markdown解决方案
  • 拉盖尔高斯光束透射石英基底石墨烯涂层的光强分布特性研究:深入探索与实验分析
  • 杨建允:AI搜索趋势对教育培训行业获客的影响
  • docker网络模式详解
  • 【CSDN 专栏】C# ASP.NET Razor 视图引擎实战:.cshtml 从入门到避坑(图解 + 案例)
  • CLIP Surgery
  • 央视报道!转行要趁早!网络安全行业人才缺口大,企业招聘需求正旺!
  • Glide动图加载进阶:构建高性能HEIF动图播放器全流程解析
  • 利用联合体判断大小端
  • APP 安全测试项总结
  • 软件测试工程师的职业导航罗盘——如何建立你的个人顾问委员会
  • 移动应用无障碍测试完全指南:如何用Maestro实现WCAG标准自动化验证
  • 每日反思(2025年12月13日)
  • 如何快速掌握PHP数据库连接:phpClickHouse完整入门指南
  • Java线程池与Executor框架完全指南:一看就会,一看就懂!
  • 构筑新势能稳基强新质:2025中国家电厂商互融发展峰会在杭州隆重举行
  • Three.js延迟渲染实战:用GBuffer技术优化多光源性能瓶颈
  • Advanced Charging Controller:终极电池保养指南