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

深度学习: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^)=yy^

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^)=(yy^)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=1n(yilog(yi^)+(1yi)log(1yi^))
其中, 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=1nj=1myijlog(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=1nj=1m(1yij^)γ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小实例(转账功能)

实现步骤 一&#xff0c;引入依赖 <!--仓库--><repositories><!--spring里程碑版本的仓库--><repository><id>repository.spring.milestone</id><name>Spring Milestone Repository</name><url>https://repo.spring.i…...

List集合的对象传输的两种方式

说明&#xff1a;在一些特定的情况&#xff0c;我们需要把对象中的List集合属性存入到数据库中&#xff0c;之后把该字段取出来转为List集合的对象使用&#xff08;如下图&#xff09; 自定义对象 public class User implements Serializable {/*** ID*/private Integer id;/*…...

海外媒体发稿:软文写作方法方式?一篇好的软文理应合理规划?

不同种类的软文会有不同的方式&#xff0c;下面小编就来来给大家分析一下&#xff1a; 方法一、要选定文章的突破点&#xff1a; 所说突破点就是这篇文章文章软文理应以什么样的视角、什么样的见解、什么样的语言设计理念、如何文章文章的标题来写。不同种类的传播效果&#…...

【秋招】算法岗的八股文之机器学习

目录 机器学习特征工程常见的计算模型总览线性回归模型与逻辑回归模型线性回归模型逻辑回归模型区别 朴素贝叶斯分类器模型 (Naive Bayes)决策树模型随机森林模型支持向量机模型 (Support Vector Machine)K近邻模型神经网络模型卷积神经网络&#xff08;CNN&#xff09;循环神经…...

为什么list.sort()比Stream().sorted()更快?

真的更好吗&#xff1f; 先简单写个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 登录失败。这个错误通常表示提供的凭据&#xff08;用户名和密码&#xff09;无法成功验证或者没有权限访问所请求的数据库。以下是一些常见的可能原因和解决方法&#xff1a; 1.错误的凭据&#xff1a;请确认提供的SA账户的用户名和密码是否正…...

Linux 终端操作命令(1)

Linux 命令 终端命令格式 command [-options] [parameter] 说明&#xff1a; command&#xff1a;命令名&#xff0c;相应功能的英文单词或单词的缩写[-options]&#xff1a;选项&#xff0c;可用来对命令进行控制&#xff0c;也可以省略parameter&#xff1a;传给命令的参…...

java与javaw运行jar程序

运行jar程序 一、java.exe启动jar程序 (会显示console黑窗口) 1、一般用法&#xff1a; java -jar myJar.jar2、重命名进程名称启动&#xff1a; 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 是一款开源的智能家居自动化平台&#xff0c;可以帮助你集成和控制各种智能设备&#xff0c;从灯光到温度调节器&#xff0c;从摄像头到媒体播放器。本教程将引导你如何在 Docker 环境中安装和配置 Home Assistant&#…...

解决 Android Studio 的 Gradle 面板上只有关于测试的 task 的问题

文章目录 问题描述解决办法 笔者出问题时的运行环境&#xff1a; Android Studio Flamingo | 2022.2.1 Android SDK 33 Gradle 8.0.1 JDK 17 问题描述 笔者最近发现一个奇怪的事情。笔者的 Android Studio 的 Gradle 面板上居然除了用于测试的 task 之外&#xff0c;其它什…...

安全杂记 - 复现nodejs沙箱绕过

目录 一. 配置环境1.下载nodejs2.nodejs配置3.报错解决方法 二. nodej沙箱绕过1. vm模块2.使用this或引用类型来进行沙箱绕过 一. 配置环境 1.下载nodejs 官网&#xff1a;https://nodejs.org/en2.nodejs配置 安装nodejs的msi文件&#xff0c;默认配置一直下一步即可&#x…...

信息安全事件分类分级指南

范围 本指导性技术文件为信息安全事件的分类分级提供指导&#xff0c;用于信息安全事件的防范与处置&#xff0c;为事前准备、事中应对、事后处理 提供一个基础指南&#xff0c;可供信息系统和基础信息传输网络的运营和使用单位以及信息安全主管部门参考使用。 术语和定义 下…...

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 时全部产品的价格&#xff0c;假设所有产品在修改前的价格都是 10 。 以 任意顺序 返回结果表。 查询结果格式如下例所示。 示例 1: 解题思路 1.题目要求我们查找在 2019-08-16 时全部产品的价格&#xff0c;假设所…...

memcpy、memmove、memcmp、memset函数的作用与区别

一、memcpy与memmove 1、memcpy 作用&#xff1a;从source的位置开始向后复制num个字节的数据到destination的内存位置。 注意&#xff1a; memcpy() 函数在遇到 ’\0’ 的时候不会停下来(strcpy字符串拷贝函数在遇到’\0’的时候会停下来)&#xff1b;destination和source…...

socket 到底是个啥

我相信大家在面试过程中或多或少都会被问到这样一个问题&#xff1a;你能解释一下什么是 socket 吗 我记得我当初的回答很是浅显&#xff1a;socket 也叫套接字&#xff0c;用来负责不同主机程序之间的网络通信连接&#xff0c;socket 的表现方式由四元组&#xff08;ip地址&am…...

奥威BI—数字化转型首选,以数据驱动企业发展

奥威BI系统BI方案可以迅速构建企业级大数据分析平台&#xff0c;可以将大量数据转化为直观、易于理解的图表和图形&#xff0c;推动和促进数字化转型的进程&#xff0c;帮助企业更好地了解自身的运营状况&#xff0c;及时发现问题并采取相应的措施&#xff0c;提高运营效率和质…...

vue中swiper使用

1.引包 说明&#xff1a;导入相应js引css import "Swiper" from "swiper" import "swiper/css/swiper.css"; import "swiper/js/swiper"; 2.结构 说明&#xff1a;必要的结构使用&#xff1b;直接封装成一个组件 <template>…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

oracle与MySQL数据库之间数据同步的技术要点

Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异&#xff0c;它们的数据同步要求既要保持数据的准确性和一致性&#xff0c;又要处理好性能问题。以下是一些主要的技术要点&#xff1a; 数据结构差异 数据类型差异&#xff…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Xen Server服务器释放磁盘空间

disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...