损失函数-二分类和多分类
二分类和多分类的损失函数
二分类
-
损失函数
L ( y , y ^ ) = − ( y l o g ( y ^ ) ) + ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y}) = -(ylog(\hat{y})) + (1-y)log(1-\hat{y}) L(y,y^)=−(ylog(y^))+(1−y)log(1−y^)
其中真实标签表示为y(取值为 0 或 1),预测概率表示为 y ^ \hat{y} y^(取值在 0 到 1 之间) -
代码
import torch
import torch.nn as nncriterion = nn.BCELoss() # 或者使用 nn.BCEWithLogitsLoss() BCEWithLogitsLoss可以直接接收logit输出
# 假设模型的输出 logits
logits = torch.tensor([0.2, 0.8, 0.5, 0.1]) #shape: (4, 1)
predicted_probabilities = torch.sigmoid(logits) #shape: (4, 1)
# 真实标签
labels = torch.tensor([0.0, 1.0, 1.0, 0.0]) #shape: (4, 1)
# 计算损失
loss = criterion(predicted_probabilities, labels)
print("Loss:", loss.item())
- 可视化损失值
对于输出的loss值,我们往往不能理解这个loss是好还是坏,我们重看损失函数,发现对于单个正样本来说:
l o s s = − l o g ( y ^ ) loss = -log(\hat{y}) loss=−log(y^)
对于单个负样本来说:
l o s s = − l o g ( 1 − y ^ ) loss = -log(1-\hat{y}) loss=−log(1−y^)
从这个公式我们可以反推模型对正样本预测的概率为:
h i t p o s = e − l o s s hit_{pos} = e^{-loss} hitpos=e−loss
对负样本预测的概率为:
h i t n e g = 1 − e − l o s s hit_{neg} = 1-e^{-loss} hitneg=1−e−loss
这个hit就比较形象了,$hit_{pos}$越接近1,说明正样本的预测效果效果越好,$hit_{neg}$越接近0,说明负样本的预测效果效果越好
多分类
- 损失函数
L ( y , y ^ ) = − ∑ c = 1 C y l o g ( y ^ ) L(y,\hat{y}) = -\sum_{c=1}^Cylog(\hat{y}) L(y,y^)=−c=1∑Cylog(y^)
其中真实标签表示为y(取值为 0 或 1,表示是否属于第c类),预测概率表示为$\hat{y}$(取值在 0 到 1 之间) - 代码
import torch
import torch.nn as nncriterion = nn.CrossEntropyLoss()# 假设模型的输出 logits(未经过 sigmoid)
logits = torch.tensor([[1.0, 2.0], # 类别 0 和 1 的 logits[0.0, 1.0],[0.5, 0.5],[0.0, 0.0]]) # shape:(4,2)# 真实标签,格式为类别索引
# 0 表示第一个类别,1 表示第二个类别
labels = torch.tensor([1, 1, 0, 0]) # shape:(1,4)# 计算损失
loss = criterion(logits, labels)print("Loss:", loss.item())
- 可视化损失值
对于输出的loss值,我们往往不能理解这个loss是好还是坏,我们重看损失函数,发现对于单个样本来说:
l o s s = − l o g ( y ^ ) loss = -log(\hat{y}) loss=−log(y^)
从这个公式我们可以反推模型对当前样本的正确类别预测的概率为:
h i t = e − l o s s hit = e^{-loss} hit=e−loss
这个hit就比较形象了,hit越接近1,说明效果越好
二分类和多分类区别
- 从损失函数的物理含义上来看,二分类的损失函数不仅希望正样本输出概率接近1,并且希望负样本的输出概率接近0;而多分类的损失函数仅仅希望正样本输出概率接近1,对于负样本其实没有约束
- 对于二分类问题:如果你希望模型不仅能找出正样本,而且筛掉副样本,就用二分类损失。如果你仅仅希望找出正样本而不管负样本,多分类的损失也能用。
多分类问题中评价问题
TP(True Positive):真实标签为正类,模型预测为正类的样本数量。
TN(True Negative):真实标签为负类,模型预测为负类的样本数量。
FP(False Positive):真实标签为负类,但模型预测为正类的样本数量。
FN(False Negative):真实标签为正类,但模型预测为负类的样本数量。
-
准确率acc
关心模型预测的能力
a c c = T P + T N T P + F P + F N + T N acc = \frac{TP+TN}{TP+FP+FN+TN} acc=TP+FP+FN+TNTP+TN -
精准率pre
关心模型预测负样本能力
p r e = T P T P + F P pre = \frac{TP}{TP+FP} pre=TP+FPTP -
召回率Recall
关心模型预测正样本的能力
r e c a l l = T P T P + F N recall = \frac{TP}{TP+FN} recall=TP+FNTP
相关文章:
损失函数-二分类和多分类
二分类和多分类的损失函数 二分类 损失函数 L ( y , y ^ ) − ( y l o g ( y ^ ) ) ( 1 − y ) l o g ( 1 − y ^ ) L(y,\hat{y}) -(ylog(\hat{y})) (1-y)log(1-\hat{y}) L(y,y^)−(ylog(y^))(1−y)log(1−y^) 其中真实标签表示为y(取值为 0 或 1&#…...
汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型,识别率89.7%
汽车损坏识别检测数据集,使用yolo,pasical voc xml,coco json格式标注,6696张图片,可识别11种损坏类型损坏: 前挡风玻璃(damage-front-windscreen ) 损坏的门 (damaged-d…...
从 Elastic 迁移到 Easysearch 指引
从 Elasticsearch 迁移到 Easysearch 需要考虑多个方面,这取决于当前使用的 Elasticsearch 版本、能容忍的停机时间、应用需求等。在此背景下,我们梳理了一下通用的升级指引,方便大家进行迁移工作。 迁移路径 Elasticsearch 版本快照兼容推…...
Yapi RCE 复现和批量编写
一、漏洞复现 首先祭出fofa,搜索语句为 app"yapi",但是为了避开国内,所以使用 app"yapi" && country"SG",SG为新加坡,结果如图 虽然有30页,但是能利用的可能也没几…...
【2024年-9月-21日-开源社区openEuler实践记录】PilotGo:简化运维管理的开源利器
开篇介绍 大家好,我是 fzr123。在运维领域摸爬滚打许久,我发现了PilotGo这个超实用的开源项目,它正悄然改变着运维人员处理日常任务的方式,为复杂的运维管理工作带来了极大的便利与效率提升。 技术亮点 1. 自动化运维任务编排 …...
ubuntu 20.04 国内源安装docker
先更新软件包,安装备要apt软件 # 更新软件包索引 sudo apt-get update# 安装需要的软件包以使apt能够通过HTTPS使用仓库 sudo apt-get install ca-certificates curl gnupg lsb-release使用阿里云源 # 添加阿里云官方GPG密钥 curl -fsSL http://mirrors.aliyun.co…...
比亚迪30亿教育慈善基金正式启动,助推中国科教进步
12月30日,比亚迪在深圳总部举行了30亿教育慈善基金启动仪式,比亚迪股份有限公司董事长兼总裁王传福与来自全国的35所高校代表及28所科技馆、博物馆代表共同启动比亚迪30亿教育慈善基金捐赠,推动中国科教进步。 捐资30亿教育慈善基金…...
【链表】重排链表,看似复杂实则并不简单~
文章目录 143. 重排链表解题思路 143. 重排链表 143. 重排链表 给定一个单链表 L 的头节点 head ,单链表 L 表示为: L0 → L1 → … → Ln - 1 → Ln 请将其重新排列后变为: L0 → Ln → L1 → Ln - 1 → L2 → Ln - 2 → … 不能…...
yakit-靶场-高级前端加解密与验签实战(for嵌套纯享版)
高级前端加解密与验签实战 一、前端验证签名(验签)表单:HMAC-SHA256 使用hmac-sha256的十六进制key值可以加密 与页面加密后的值相同 热加载: encryptData func(p) { //sha256key值key codec.DecodeHex("313233343132333…...
洛谷 P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布
题解: #include<iostream> #include<vector> //定义二维数组,直接标识不同出法相应对应关系 int mark[5][5]{{0,-1,1,1,-1},{1,0,-1,1,-1},{-1,1,0,-1,1},{-1,-1,1,0,1},{1,1,-1,-1,0}}; void JudgeScore(int A,int B,int& countA,int&…...
NLP论文速读(NeurIPS 2024)|BERT作为生成式上下文学习者BERTs are Generative In-Context Learners
论文速读|BERTs are Generative In-Context Learners 论文信息: 简介: 本文探讨了在自然语言处理(NLP)领域中,上下文学习(in-context learning)的能力,这通常与因果语言模型&#x…...
亚马逊云科技 | Amazon Nova:智能技术新势力
在2024年亚马逊云科技re:invent大会上,Amazon Nova 系列自研生成式 AI 多模态模型重磅登场,新一代的AI产品-Amazon Nova,隶属于 Amazon Bedrock,一共发布6款大模型,精准切入不同领域,解锁多元业务可能&…...
Kali 自动化换源脚本编写与使用
1. 背景与需求 在使用 Kali Linux 的过程中,软件源的配置对系统的更新与软件安装速度至关重要。 Kali 的默认官方源提供了安全且最新的软件包,但有时由于网络条件或地理位置的限制,使用官方源可能会出现速度较慢的问题。 为了解决这一问题&a…...
【已解决】PDF文档有密码怎么办(2024新)免费在线工具PDF2Go
强大的解密工具PDF2Go使用指南 一、PDF2Go简介 PDF2Go是由德国QaamGo公司开发的在线PDF工具箱,以其强大的功能和用户友好的界面而闻名。它不仅免费,而且不需要用户注册或安装任何软件,只需打开浏览器即可使用。 二、功能特点 1. 免费且无需…...
华为ensp-BGP联盟
学习新思想,争做新青年,今天学习BGP联盟 实验介绍 一个BGP联盟是一个具有内部层次结构的AS。一个BGP联盟由若干个子AS 组成,子AS也称为成员AS。对于一个BGP联盟,其成员AS内部的各路由器之间需要建立全互联的IBGP邻居关系或使用B…...
ArcGIS中怎么进行水文分析?(思路介绍)
最近有人咨询,ArcGIS中怎么进行水文分析,大致的说一下河网提取的思路哈 解决思路:dem填洼→计算水流方向→计算水流累积矩阵→形成河网 dem填洼 计算水流方向 计算水流累积矩阵 用栅格计算器,设阈值(自己多次尝试&…...
LabVIEW中实现多个Subpanel独立调用同一个VI
在LabVIEW中,如果需要通过多个Subpanel同时调用同一个VI并让这些VI实例独立运行,可以通过以下方法实现: 1. 问题背景 LabVIEW默认的VI是以单实例方式运行的。当将同一个VI加载到多个Subpanel时,会因为共享同一内存空间而导致冲突…...
【SpringMVC】Bean 加载控制
在实际开发中,SpringMVC 负责扫描和加载 Controller 层的 Bean 对象,而业务层和数据层等其他模块的 Bean 则由 Spring 框架负责扫描和加载。那么,如何控制 Spring 仅加载除了 Controller 层之外的其他 Bean 呢?为了解决这个问题&a…...
Socket编程中关于服务器端监听端口与新连接端口的深入剖析
Socket编程中关于服务器端监听端口与新连接端口的深入剖析 在Socket编程领域,存在一个容易让初学者感到困惑的问题。尽管很多人在网络上进行了相关探讨,但不少解释要么不够清晰明了,要么太过肤浅,未能深入到问题的核心࿰…...
如何通过HTTP API更新Doc
本文介绍如何通过HTTP API更新Collection中已存在的Doc。 说明 若更新Doc时指定id不存在,则本次更新Doc操作无效 如只更新部分属性fields,其他未更新属性fields默认被置为null 前提条件 已创建Cluster:创建Cluster。 已获得API-KEY&#…...
React Native 导航系统实战(React Navigation)
导航系统实战(React Navigation) React Navigation 是 React Native 应用中最常用的导航库之一,它提供了多种导航模式,如堆栈导航(Stack Navigator)、标签导航(Tab Navigator)和抽屉…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
【JVM】- 内存结构
引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...
Java求职者面试指南:计算机基础与源码原理深度解析
Java求职者面试指南:计算机基础与源码原理深度解析 第一轮提问:基础概念问题 1. 请解释什么是进程和线程的区别? 面试官:进程是程序的一次执行过程,是系统进行资源分配和调度的基本单位;而线程是进程中的…...
