当前位置: 首页 > 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>…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

Java 加密常用的各种算法及其选择

在数字化时代&#xff0c;数据安全至关重要&#xff0c;Java 作为广泛应用的编程语言&#xff0c;提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景&#xff0c;有助于开发者在不同的业务需求中做出正确的选择。​ 一、对称加密算法…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建

华为云FlexusDeepSeek征文&#xff5c;DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色&#xff0c;华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型&#xff0c;能助力我们轻松驾驭 DeepSeek-V3/R1&#xff0c;本文中将分享如何…...