深度学习:Pytorch常见损失函数Loss简介
深度学习:Pytorch常见损失函数Loss简介
- L1 Loss
- MSE Loss
- SmoothL1 Loss
- CrossEntropy Loss
- Focal Loss
此篇博客主要对深度学习中常用的损失函数进行介绍,并结合Pytorch的函数进行分析,讲解其用法。
L1 Loss
L1 Loss计算预测值和真值的平均绝对误差。
L o s s ( y , y ^ ) = ∣ y − y ^ ∣ Loss(y,\hat{y}) = |y-\hat{y}| Loss(y,y^)=∣y−y^∣
Pytorch函数:
torch.nn.L1Loss(size_average=None, reduce=None, reduction='mean')
参数:
- size_average (bool, optional) – 此参数已弃用;
- reduce (bool, optional) – 此参数已弃用;
- reduction (str, optional) – 由以下三个参数选其一:‘none’ | ‘mean’ | ‘sum’. ‘none’:不对各个元素的误差处理, ‘mean’:输出是各个元素误差的平均值,‘sum’:输出是将各个元素的误差求和。 默认:‘mean’。
MSE Loss
MSE Loss计算预测值和真值的均方误差。
L o s s ( y , y ^ ) = ( y − y ^ ) 2 Loss(y,\hat{y}) = (y-\hat{y})^2 Loss(y,y^)=(y−y^)2
Pytorch函数:
torch.nn.MSELoss(size_average=None, reduce=None, reduction='mean')
参数:
- size_average (bool, optional) – 此参数已弃用。
- reduce (bool, optional) – 此参数已弃用。
- reduction (str, optional) – 由以下三个参数选其一:‘none’ | ‘mean’ | ‘sum’. ‘none’:不对各个元素的误差处理, ‘mean’:输出是各个元素误差的平均值,‘sum’:输出是将各个元素的误差求和。 默认:‘mean’。
SmoothL1 Loss
在训练初期,当预测值和真值相差较大时,损失函数的值较大,容易导致训练不稳定,为了防止梯度爆炸(梯度值是指损失函数对输入的导数,梯度爆炸是指梯度值很大),同时当预测值和真值相差较小时,梯度值足够小,可以使用SmoothL1 Loss,它可以视作L1 Loss和L2 Loss(MSE Loss)的结合,计算公式如下:
KaTeX parse error: No such environment: equation at position 8: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ Loss(y,\hat{y}…
Pytorch函数:
torch.nn.SmoothL1Loss(size_average=None, reduce=None, reduction='mean', beta=1.0)
参数:
- size_average (bool, optional) – 此参数已弃用。
- reduce (bool, optional) – 此参数已弃用。
- reduction (str, optional) – 由以下三个参数选其一:‘none’ | ‘mean’ | ‘sum’. ‘none’:不对各个元素的误差处理, ‘mean’:输出是各个元素误差的平均值,‘sum’:输出是将各个元素的误差求和。 默认:‘mean’。
- beta ( float ,optional) – 指定 L1 Loss和 L2 Loss之间变化的阈值。该值必须是非负数。默认值:1.0
CrossEntropy Loss
CrossEntropy Loss是在处理分类问题中常用的一种损失函数,如二分类和多分类。此函数来源于信息论中的交叉熵概念,用于衡量两个预估概率分布和真实概率分布之间的差异。交叉熵损失函数公式如下:
(1)对于二分类问题:
L o s s ( y , y ^ ) = − ∑ i = 1 n ( y i l o g ( y i ^ ) + ( 1 − y i ) l o g ( 1 − y i ^ ) ) Loss(y,\hat{y}) = -\sum_{i=1}^{n}(y_ilog(\hat{y_i})+(1-y_i)log(1-\hat{y_i})) Loss(y,y^)=−i=1∑n(yilog(yi^)+(1−yi)log(1−yi^))
其中, y y y是真值, y ^ \hat{y} y^是预测值,n是样本的数量,每个样本都会计算一个损失,如果reduction是‘mean’,那么会对所有样本的损失求平均;如果reduction是‘sum’,那么会对所有样本的损失求和。
(2)对于多分类问题:
L o s s ( y , y ^ ) = − ∑ i = 1 n ∑ j = 1 m y i j l o g ( y i j ^ ) Loss(y,\hat{y}) = - \sum_{i=1}^{n}\sum_{j=1}^{m}y_{ij}log(\hat{y_{ij}}) Loss(y,y^)=−i=1∑nj=1∑myijlog(yij^)
其中, y i j y_{ij} yij是第i个样本的真实标签在第j类的概率, y i j ^ \hat{y_{ij}} yij^是第i个样本预测为第j类的概率,n是样本数量,m是类别的数量,每个样本都会计算一个损失,如果reduction是‘mean’,那么会对所有样本的损失求平均;如果reduction是‘sum’,那么会对所有样本的损失求和。
Pytorch函数:
torch.nn.CrossEntropyLoss(weight=None, size_average=None, ignore_index=- 100, reduce=None, reduction='mean', label_smoothing=0.0)
参数:
- weight (Tensor, optional) – 为每个类指定的手动缩放权重。如果给定,则必须是大小为C的张量。
- size_average (bool, optional) – 此参数已弃用。
- ignore_index (int, optional) – 指定被忽略且不会对输入梯度产生影响的目标值。
- reduce (bool, optional) – 此参数已弃用。
- reduction (str, optional) – 由以下三个参数选其一:‘none’ | ‘mean’ | ‘sum’. ‘none’:不对各个元素的误差处理, ‘mean’:输出是各个元素误差的平均值,‘sum’:输出是将各个元素的误差求和。 默认:‘mean’。
- label_smoothing (float, optional) – [0.0, 1.0] 中的浮点数。指定计算损失时的平滑量,其中 0.0 表示不平滑。默认值: 0.0.
Focal Loss
Focal Loss主要用来处理正负样本(特别是前景和背景样本的分类)不均衡的问题。样本不均衡会导致训练效率低,甚至可能会导致模型退化。Focal Loss可以视为对CrossENtropy Loss增加权重加以平衡(增加预测概率小的样本权重,其对应的损失函数值变大;反而降低预测概率大的样本权重,其对应的损失函数值变小)。参考公式如下:
L o s s ( y , y ^ ) = − ∑ i = 1 n ∑ j = 1 m ( 1 − y i j ^ ) γ y i j l o g ( y i j ^ ) Loss(y,\hat{y}) = - \sum_{i=1}^{n}\sum_{j=1}^{m}(1-\hat{y_{ij}})^{\gamma}y_{ij}log(\hat{y_{ij}}) Loss(y,y^)=−i=1∑nj=1∑m(1−yij^)γyijlog(yij^)
其中, γ \gamma γ常取2.
相关文章:
深度学习:Pytorch常见损失函数Loss简介
深度学习:Pytorch常见损失函数Loss简介 L1 LossMSE LossSmoothL1 LossCrossEntropy LossFocal Loss 此篇博客主要对深度学习中常用的损失函数进行介绍,并结合Pytorch的函数进行分析,讲解其用法。 L1 Loss L1 Loss计算预测值和真值的平均绝对…...
【Android-java】Parcelable 是什么?
Parcelable 是 Android 中的一个接口,用于实现将对象序列化为字节流的功能,以便在不同组件之间传递。与 Java 的 Serializable 接口不同,Parcelable 的性能更高,适用于 Android 平台。 要实现 Parcelable 接口,我们需…...
Spring整合MyBatis小实例(转账功能)
实现步骤 一,引入依赖 <!--仓库--><repositories><!--spring里程碑版本的仓库--><repository><id>repository.spring.milestone</id><name>Spring Milestone Repository</name><url>https://repo.spring.i…...
List集合的对象传输的两种方式
说明:在一些特定的情况,我们需要把对象中的List集合属性存入到数据库中,之后把该字段取出来转为List集合的对象使用(如下图) 自定义对象 public class User implements Serializable {/*** ID*/private Integer id;/*…...
海外媒体发稿:软文写作方法方式?一篇好的软文理应合理规划?
不同种类的软文会有不同的方式,下面小编就来来给大家分析一下: 方法一、要选定文章的突破点: 所说突破点就是这篇文章文章软文理应以什么样的视角、什么样的见解、什么样的语言设计理念、如何文章文章的标题来写。不同种类的传播效果&#…...
【秋招】算法岗的八股文之机器学习
目录 机器学习特征工程常见的计算模型总览线性回归模型与逻辑回归模型线性回归模型逻辑回归模型区别 朴素贝叶斯分类器模型 (Naive Bayes)决策树模型随机森林模型支持向量机模型 (Support Vector Machine)K近邻模型神经网络模型卷积神经网络(CNN)循环神经…...
为什么list.sort()比Stream().sorted()更快?
真的更好吗? 先简单写个demo List<Integer> userList new ArrayList<>();Random rand new Random();for (int i 0; i < 10000 ; i) {userList.add(rand.nextInt(1000));}List<Integer> userList2 new ArrayList<>();userList2.add…...
SQL账户SA登录失败,提示错误:18456
错误代码 18456 表示 SQL Server 登录失败。这个错误通常表示提供的凭据(用户名和密码)无法成功验证或者没有权限访问所请求的数据库。以下是一些常见的可能原因和解决方法: 1.错误的凭据:请确认提供的SA账户的用户名和密码是否正…...
Linux 终端操作命令(1)
Linux 命令 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应功能的英文单词或单词的缩写[-options]:选项,可用来对命令进行控制,也可以省略parameter:传给命令的参…...
java与javaw运行jar程序
运行jar程序 一、java.exe启动jar程序 (会显示console黑窗口) 1、一般用法: java -jar myJar.jar2、重命名进程名称启动: echo off copy "%JAVA_HOME%\bin\java.exe" "%JAVA_HOME%\bin\myProcess.exe" myProcess -jar myJar.jar e…...
安装和配置 Home Assistant 教程 HACS Homkit 米家等智能设备接入
安装和配置 Home Assistant 教程 简介 Home Assistant 是一款开源的智能家居自动化平台,可以帮助你集成和控制各种智能设备,从灯光到温度调节器,从摄像头到媒体播放器。本教程将引导你如何在 Docker 环境中安装和配置 Home Assistant&#…...
解决 Android Studio 的 Gradle 面板上只有关于测试的 task 的问题
文章目录 问题描述解决办法 笔者出问题时的运行环境: Android Studio Flamingo | 2022.2.1 Android SDK 33 Gradle 8.0.1 JDK 17 问题描述 笔者最近发现一个奇怪的事情。笔者的 Android Studio 的 Gradle 面板上居然除了用于测试的 task 之外,其它什…...
安全杂记 - 复现nodejs沙箱绕过
目录 一. 配置环境1.下载nodejs2.nodejs配置3.报错解决方法 二. nodej沙箱绕过1. vm模块2.使用this或引用类型来进行沙箱绕过 一. 配置环境 1.下载nodejs 官网:https://nodejs.org/en2.nodejs配置 安装nodejs的msi文件,默认配置一直下一步即可&#x…...
信息安全事件分类分级指南
范围 本指导性技术文件为信息安全事件的分类分级提供指导,用于信息安全事件的防范与处置,为事前准备、事中应对、事后处理 提供一个基础指南,可供信息系统和基础信息传输网络的运营和使用单位以及信息安全主管部门参考使用。 术语和定义 下…...
Vue系列第八篇:echarts绘制柱状图和折线图
本篇将使用echarts框架进行柱状图和折线图绘制。 目录 1.绘制效果 2.安装echarts 3.前端代码 4.后端代码 1.绘制效果 2.安装echarts // 安装echarts版本4 npm i -D echarts4 3.前端代码 src/api/api.js //业务服务调用接口封装import service from ../service.js //npm …...
SQL-每日一题【1164. 指定日期的产品价格】
题目 产品数据表: Products 写一段 SQL来查找在 2019-08-16 时全部产品的价格,假设所有产品在修改前的价格都是 10 。 以 任意顺序 返回结果表。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查找在 2019-08-16 时全部产品的价格,假设所…...
memcpy、memmove、memcmp、memset函数的作用与区别
一、memcpy与memmove 1、memcpy 作用:从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意: memcpy() 函数在遇到 ’\0’ 的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来);destination和source…...
socket 到底是个啥
我相信大家在面试过程中或多或少都会被问到这样一个问题:你能解释一下什么是 socket 吗 我记得我当初的回答很是浅显:socket 也叫套接字,用来负责不同主机程序之间的网络通信连接,socket 的表现方式由四元组(ip地址&am…...
奥威BI—数字化转型首选,以数据驱动企业发展
奥威BI系统BI方案可以迅速构建企业级大数据分析平台,可以将大量数据转化为直观、易于理解的图表和图形,推动和促进数字化转型的进程,帮助企业更好地了解自身的运营状况,及时发现问题并采取相应的措施,提高运营效率和质…...
vue中swiper使用
1.引包 说明:导入相应js引css import "Swiper" from "swiper" import "swiper/css/swiper.css"; import "swiper/js/swiper"; 2.结构 说明:必要的结构使用;直接封装成一个组件 <template>…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
铭豹扩展坞 USB转网口 突然无法识别解决方法
当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
