损失函数:Cross Entropy Loss (交叉熵损失函数)

损失函数:Cross Entropy Loss (交叉熵损失函数)

  • 前言
  • 相关介绍
  • Softmax函数
    • 代码实例
  • Cross Entropy Loss (交叉熵损失函数)
    • Cross Entropy Loss与BCE loss区别
    • 代码实例

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入人工智能知识点专栏、Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

相关介绍

损失函数(Loss Function)在机器学习和深度学习中扮演着至关重要的角色,它是一个评估模型预测输出与真实标签之间差异程度的函数。损失函数量化了模型预测错误的程度,并在训练过程中作为优化的目标,模型通过不断地调整内部参数以最小化损失函数的值,从而实现更好的拟合数据和泛化能力。

主要特性与作用:

  1. 量化误差:损失函数将模型预测值与实际目标值之间的差异转化为数值,这样就可以通过数值大小直观地衡量模型的预测效果。

  2. 优化导向:在训练神经网络时,优化算法(如梯度下降法)会根据损失函数的梯度来更新模型参数,使损失函数朝着最小化方向移动。

  3. 种类多样:根据不同的任务和需求,有多种不同的损失函数可供选择。例如,在二分类任务中常用的有二元交叉熵损失函数(Binary Cross-Entropy Loss/BCE Loss),在多分类任务中有softmax交叉熵损失函数,在回归任务中常见的是均方误差(Mean Squared Error/MSE)和绝对误差(Mean Absolute Error/MAE)等。

常见的损失函数包括:

  • 二元交叉熵损失(Binary Cross-Entropy Loss / BCE Loss):适用于二分类问题,衡量的是sigmoid函数输出的概率与真实标签间的距离。

  • 多分类交叉熵损失(Categorical Cross-Entropy Loss):对于多分类问题,每个样本可能属于多个类别之一,使用softmax函数和交叉熵损失。

  • 均方误差(Mean Squared Error / MSE):在回归问题中常用,计算预测值与真实值之差的平方平均。

  • 均方根误差(Root Mean Squared Error / RMSE):MSE的平方根,也是回归任务中的损失函数。

  • Huber损失:一种既能兼顾均方误差又能容忍较大误差的混合损失函数,常用于回归问题中。

  • Dice系数损失(Dice Loss):在图像分割任务中广泛使用,衡量的是预测分割区域与真实分割区域的重叠程度。

  • IoU(Intersection over Union)损失:也是在图像分割领域常用的损失函数,计算的是预测区域与真实区域交集与其并集的比例。

  • Focal Loss:在目标检测中应对类别不平衡问题的损失函数,对易分类的样本给予较小的权重,强调难分类样本的训练。

每种损失函数都有其适用的情境和优缺点,选择合适的损失函数是优化模型性能的关键因素之一。

交叉熵(Cross-Entropy)之所以能够用于分类问题,是因为它能够很好地衡量模型预测的概率分布与实际标签分布之间的相似度,而且它拥有几个非常适合分类任务的重要特性:

  1. 信息论基础:交叉熵源于信息论中的概念,表示一个概率分布 (p) 与另一个概率分布 (q) 的差异。在分类问题中,我们可以把 (p) 视为真实数据的标签分布,(q)视为模型预测的概率分布。交叉熵可以衡量模型预测概率与实际类别标签之间的信息差异。

  2. 最大似然估计的自然延伸:在机器学习中,我们通常倾向于最大化模型对数据的似然性,即模型预测给定数据标签的概率。交叉熵损失函数实际上是负对数似然函数在多项式分布(对于多分类问题)或伯努利分布(对于二分类问题)下的特殊情况,通过最小化交叉熵损失,相当于最大化数据的对数似然性。

  3. 梯度稳定性:交叉熵损失函数是连续且可微的,其梯度容易计算且对于大多数情况是有意义的。这意味着在训练过程中,模型可以根据损失函数的梯度进行有效的参数更新。

  4. 稀疏性惩罚:对于多分类问题,softmax函数与交叉熵损失组合使用时,不仅鼓励模型正确预测每个样本的类别,同时也通过归一化机制惩罚了预测概率分布的不均匀性,即模型不能过于肯定任何一个错误类别。

  5. 处理多类别和二类别问题:交叉熵既可以用于处理二分类问题(通过二元交叉熵,Binary Cross-Entropy),也可以处理多分类问题(通过多类别交叉熵,Multiclass
    Cross-Entropy)。在二分类问题中,通常搭配Sigmoid函数输出概率;在多分类问题中,通常配合Softmax函数生成类别概率分布。

总的来说,交叉熵损失函数因其良好的理论基础、优化目标清晰以及在实践中的优秀表现,成为了分类问题中最常用的损失函数之一。

Softmax函数

Softmax函数是深度学习和机器学习中广泛使用的激活函数,特别是在多分类问题中。它的目的是将一个线性变换的输出(通常称为logits)映射为一个概率分布,使得所有类别的概率总和为1,每个类别的概率都在0到1之间。

Softmax函数的形式:

对于一个向量 ( z ) ,其中包含每个类别的原始得分(logits),Softmax函数的计算公式如下:

s o f t m a x ( z ) i = e z i ∑ j = 1 K e z j softmax(z)_i = \frac{e^{z_i}}{\sum_{j=1}^{K} e^{z_j}} softmax(z)i=j=1Kezjezi

其中:

  • ( K ) 表示类别总数。
  • ( z_i ) 表示第 ( i ) 个类别的得分。
  • ( softmax(z)_i ) 表示第 ( i ) 个类别的归一化概率。

整个Softmax函数的结果是一个概率分布向量,其中每个元素都是原得分经过指数函数变换后再除以所有得分指数函数值之和,因此所有元素的和为1。

Softmax函数的特性:

  1. 概率性质:Softmax函数确保输出的每个元素都是非负数,并且所有元素的和为1,满足概率分布的要求。
  2. 竞争性:Softmax函数会使得分最高的类别获得最大的概率值,其余类别的概率按比例递减,形成了一种“赢家通吃”的效应。
  3. 平滑连续:由于使用了指数函数和平滑的除法运算,Softmax函数输出是平滑且连续的,便于在训练过程中梯度的计算和传播。

应用场景

在深度学习的多分类问题中,例如图像分类、文本分类等任务,Softmax函数通常与交叉熵损失函数一起使用。模型最后一层通常会产生一个logits向量,接着通过Softmax函数得到每个类别的概率,最后计算与实际标签之间的交叉熵损失,以此指导模型参数的更新。

代码实例

在PyTorch中,你可以直接使用torch.softmax()函数来实现Softmax操作。下面是一个简单的实例:

import torch# 假设我们有一个代表logits的张量
logits = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])# 使用torch.softmax函数计算Softmax值
probs = torch.softmax(logits, dim=1)print(probs)
'''
tensor([[0.0900, 0.2447, 0.6652],[0.0900, 0.2447, 0.6652]])
'''

上述代码中,logits是一个2x3的张量,代表两个样本的三个类别的原始得分。dim=1表示我们在每个样本的类别间计算Softmax,也就是对每一行进行操作。执行torch.softmax()后,probs张量将包含每个样本各类别的归一化概率。

注意,如果你正在训练一个多分类模型并且使用了nn.CrossEntropyLoss()损失函数,通常不需要单独调用torch.softmax(),因为该损失函数内部已经包含了对logits计算Softmax的过程。在多数情况下,你只需将模型的原始输出(logits)传递给损失函数,并配合真实类别标签即可。

Cross Entropy Loss (交叉熵损失函数)

在这里插入图片描述

nn.CrossEntropyLoss是PyTorch中用于多分类问题的一种损失函数,特别适用于输出层是softmax激活函数后的分类任务。它结合了softmax函数和交叉熵损失(Cross-Entropy Loss)的操作,简化了模型训练过程中的计算步骤和代码实现。

基本概念:

  • 交叉熵损失(Cross-Entropy Loss)源于信息论中的熵概念,用于衡量两个概率分布之间的差异。在机器学习和深度学习中,它用来量化模型预测的概率分布与真实标签分布之间的差距。

  • softmax函数:在多分类问题中,softmax函数将模型的线性输出(logits)转换为一个概率分布,确保所有类别的概率和为1。softmax函数的输出可以用作模型预测的概率分布。

nn.CrossEntropyLoss的工作方式:

  • PyTorch中的nn.CrossEntropyLoss接收两个输入:

    • input:模型的原始输出(logits),通常是未经过softmax激活的张量。
    • target:真实的一维标签张量,包含了每个样本所属类别的索引,通常采用LongTensor类型。
  • 内部处理流程

    • 对于每个样本,首先计算其对应的softmax概率分布。
    • 然后,根据真实标签计算交叉熵损失。损失是对每个样本的损失值进行平均得到的,如果没有特殊指定,损失默认会在批次(batch)层面求平均。
  • 损失函数计算公式

    • 对于单个样本,交叉熵损失是 -∑(yi * log(pi)),其中 yi 是实际标签的one-hot编码(在实际情况中,由于标签是索引形式,nn.CrossEntropyLoss内部会处理one-hot编码),pi 是模型预测的该类别概率。
    • 对于整个批次,损失则是各样本损失的平均。

Cross Entropy Loss与BCE loss区别

  • 关于BCE Loss(二元交叉熵损失函数)的相关知识,可查阅损失函数:BCE Loss(二元交叉熵损失函数)、Dice Loss(Dice相似系数损失函数)

CrossEntropyLossBCELoss 都是 PyTorch 中用于监督学习分类任务的损失函数,它们分别适用于不同的分类场景:

BCELoss (Binary Cross Entropy Loss)

  • BCELoss 是二元交叉熵损失函数,专门用于二分类问题,即输出只有两类(0或1,正面或负面,真或假等)。
  • 使用 BCELoss 时,模型的输出一般是通过 Sigmoid 函数得到的概率值,介于0和1之间。
  • 计算公式为 -y * log(p) - (1-y) * log(1-p),其中 y 是真实的标签(0或1),p 是模型预测的概率。
  • 输入要求是经过Sigmoid激活函数之后的输出张量和相应的真实标签张量,二者形状必须相同。

CrossEntropyLoss (Multinomial Cross Entropy Loss 或者 Softmax Cross Entropy Loss)

  • CrossEntropyLoss 适用于多分类问题,它可以处理任何数量的类别,不仅仅是二分类。
  • 对于多分类问题,模型的输出通常是一个 logits(未归一化的预测值),然后CrossEntropyLoss内部会先通过Softmax函数将其转换为概率分布,然后再计算交叉熵。
  • 使用 CrossEntropyLoss 时,不需要手动在输出层之前添加Sigmoid或Softmax函数,因为它已经包含了Softmax运算步骤。
  • 它结合了Softmax函数和交叉熵损失的功能,简化了多分类任务的训练流程,其计算公式基于交叉熵和类别间的互斥性(即对于每个样本,所有类别的概率之和为1)。
  • 输入要求是未经Softmax激活函数处理的logits张量和one-hot编码形式的真实标签张量。

总结来说,两者的主要区别在于:

  • BCELoss用于二分类任务,而CrossEntropyLoss适用于多分类任务。
  • BCELoss前接Sigmoid,CrossEntropyLoss前接Softmax(但这一步在使用CrossEntropyLoss时由损失函数内部自动完成)。
  • BCELoss处理的是二元概率分布,而CrossEntropyLoss处理的是多类别概率分布。

代码实例

import torch
import torch.nn as nn# 假设模型输出和真实标签
output_logits = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])  # 假设输出是两样本的三个类别的logits
targets = torch.tensor([1, 2])  # 假设第一样本是第二类,第二样本是第三类# 创建交叉熵损失函数
criterion = nn.CrossEntropyLoss()# 计算损失
loss = criterion(output_logits, targets)print(loss.item())  # 输出损失值 # 0.9076058864593506

在上述代码中,nn.CrossEntropyLoss()函数内部处理了softmax激活和交叉熵损失计算,直接返回了模型预测与真实标签之间的交叉熵损失。

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入人工智能知识点专栏、Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823336.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【yolo数据集合并方法】

yolo数据集合并方法 1.数据集容2.数据集合并 1.数据集容 包含训练集、验证集和测试集。 每一个数据集中包含图像文件夹和标签文件夹。 yaml文件中定义了配置参数,包括目标识别的class类别: 2.数据集合并 需要修改labels文件夹下txt文件class信息&…

记录shell编程中$1,$@等符号的含义

笔者最近老是遇到shell中的$相关的题目,于是打算写篇文章记录一下。考虑到并没有特别多需要解释的内容,所以并不会进行介绍,上图上表上代码,让机器说话,machine always right test.sh #/bin/bash echo $# $# echo …

gcc原理和使用

gcc gcc是什么 GCC,全称 GNU Compiler Collection(GNU 编译器套件),是一套功能强大的编程语言编译器,由自由软件基金会(Free Software Foundation, FSF)作为GNU项目的一部分开发和维护。它最初…

宝塔使用笔记

1.配置ssl 验证方式:文件验证和dns验证都试一下 参考: https://app.applebyme.cn/cloud/https/23050.html

自定义类型: 联合体和枚举

本文索引 1. 联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员的结构体和联合体对比1.4 联合体大小的计算 2. 枚举类型2.1 枚举类型的声明2.2 枚举类型的优点2.3 枚举类型的使用 前言 : 书接上文, 下面我将继续详解C语言的剩下两个自定义类型: 联合体和枚举 个人主页…

当面试问你接口测试时,不要再说不会了!

很多人会谈论接口测试。到底什么是接口测试?如何进行接口测试?这篇文章会帮到你。 01 前端和后端 在谈论接口测试之前,让我们先明确前端和后端这两个概念。 前端是我们在网页或移动应用程序中看到的页面,它由 HTML 和 CSS 编写…

第十五届蓝桥杯复盘python大学A组——试题B 召唤数学精灵

按照正常思路解决,由于累乘消耗大量时间,因此这不是一个明智的解决方案。 这段代码执行速度非常慢的原因在于它试图计算非常大的数的阶乘(累乘),并且对于每一个i的值都执行这个计算。阶乘的增长是极其迅速的&#xff…

SQL数据库管理开发工具:DataGrip 2024(win/mac)激活版

JetBrains DataGrip是一款专业的SQL数据库管理开发工具。DataGrip允许您以不同的方式发展模式以及执行信息查询,并提供服务本地文化历史问题记录,可以提高跟踪您的所有学生活动并保护如果您不选择丢失您的工作。DataGrip允许您通过建立相应的操作按名称就…

HackMyVM-Connection

目录 信息收集 arp nmap WEB web信息收集 dirsearch smbclient put shell 提权 系统信息收集 suid gdb提权 信息收集 arp ┌─[rootparrot]─[~/HackMyVM] └──╼ #arp-scan -l Interface: enp0s3, type: EN10MB, MAC: 08:00:27:16:3d:f8, IPv4: 192.168.9.115 S…

[Linux]--关于进程控制

进程创建,fork/vfork 在linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程。新进程为子进程&#xff0c;而原进程为父进程。 #include <unistd.h> pid_t fork(void); 返回值&#xff1a;自进程中返回0&#xff0c;父进程返回子进程id&#x…

前端开发攻略---在页面上渲染大量元素,使用defer减少白屏等待时间,优化页面响应速度

1、优化前 2、优化后 3、优化思路 1、在元素数量不变的情况下&#xff0c;进行一步一步的渲染&#xff0c;先渲染一些重要的元素或者需要用户第一时间看到的元素。 2、使用Hooks封装优化函数 4、优化代码 拥有大量元素的组件&#xff08;Item&#xff09;&#xff1a;文件位置&…

Xshell无法输入命令输入命令卡顿

Xshell是一款功能强大的终端模拟软件&#xff0c;可以让用户通过SSH、Telnet、Rlogin、SFTP等协议远程连接到Linux、Unix、Windows等服务器。然而&#xff0c;在使用Xshell的过程中&#xff0c;我们可能会遇到一些问题。比如输入不了命令&#xff0c;或者输入命令很卡。这些问题…

C++ stl容器list的底层模拟实现

目录 前言&#xff1a; 1.创建节点 2.普通迭代器的封装 3.反向迭代器的封装 为什么要对正向迭代器进行封装&#xff1f; 4.const迭代器 5.构造函数 6.拷贝构造 7.赋值重载 8.insert 9.erase 10.析构 11.头插头删&#xff0c;尾插尾删 12.完整代码简单测试 总结&…

你也许不知道的 Confluence 快捷操作

Confluence 是一种企业知识管理和协作平台&#xff0c;用于创建、共享和组织团队的文档、知识和想法。它支持团队成员进行实时协作、评论和编辑文档&#xff0c;提供了强大的搜索功能&#xff0c;方便用户快速找到需要的信息。 Confluence 快捷键解析&#xff0c;标注了对应的…

创新力作 | 模块化快建办公训练中心盛大开业

在上海国际旅游度假区的湖畔&#xff0c;由优积科技建造的城市赛艇中心如同一幅动人的画卷&#xff0c;展现在世人面前。这座赛艇中心不仅是赛艇运动的圣地&#xff0c;更是一个融合了技术创新与建筑美学的多功能交流平台&#xff0c;体现了上海这座城市的精神底色和对赛艇文化…

基于springboot实现人口老龄化社区服务与管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现人口老龄化社区服务与管理系统演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了人口老龄化社区服务与管理平台的开发全过程。通过分析人口老龄化社区服务与管理平台方面的不足&#xff…

网络编程(现在不重要)

目录 网络编程三要素与InetAddress类的使用 软件架构 面临的主要问题 网络编程三要素&#xff08;对应三个问题&#xff09; InetAddress的使用 TCP与UDP协议剖析与TCP编程案例&#xff08;了解&#xff09; TCP协议 UDP协议 例子 UDP、URL网络编程 URL&#xff1a;&…

一夜爆红的4款国产软件,却一度被大众误以为是外国人开发

在现今高度信息化的时代&#xff0c;计算机已经深深地渗透到了我们生活的每一个角落。 从日常的办公学习到娱乐休闲&#xff0c;几乎都离不开计算机技术的支持。而在这背后&#xff0c;软件作为计算机的灵魂&#xff0c;其发展历史可谓波澜壮阔。 中国软件产业经过多年的积累和…

node express 请求参数接收方式汇总

express 安装使用 express官网 express 是node.js 中写后端服务比较流行的框架。 安装express npm install -g express安装 express-generator 相当于vue的cli 用来快速生成express项目 npx express-generator生成项目mynode -e是使用ejs模版 express -e mynodeexpress生成器生…

2024电容笔专业对比评测:西圣、倍思、绿联哪款平替电容笔更好用?

在当今学习和工作环境中&#xff0c;iPad作为一种多功能的学习和生产力工具&#xff0c;受到越来越多人的青睐与需求。然而&#xff0c;要充分发挥iPad的功能&#xff0c;一个优质的电容笔是必不可少的配件之一。电容笔不仅可以帮助用户进行手写笔记、绘画创作&#xff0c;还能…