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

PyTorch 的 nn.NLLLoss:负对数似然损失全解析

PyTorch 的 nn.NLLLoss:负对数似然损失全解析

在 PyTorch 的损失函数家族中,nn.NLLLoss(Negative Log Likelihood Loss,负对数似然损失)是一个不太起眼但非常重要的成员。它经常跟 LogSoftmax 搭配出现,尤其在分类任务中扮演关键角色。今天我们就来聊聊 nn.NLLLoss 的数学原理、使用方法,以及它适用的场景,带你彻底搞懂这个损失函数。

1. 什么是负对数似然损失?

先从名字拆解:

  • 似然(Likelihood):在统计学中,似然表示“给定模型参数时,观察到数据的概率”。对数似然(Log Likelihood)是它的对数形式,常用于简化计算。
  • 负对数似然(Negative Log Likelihood, NLL):把对数似然取负数,作为损失函数,目标是最小化它。

在机器学习中,负对数似然损失通常用来衡量模型预测的概率分布与真实标签的差距,尤其是在分类任务中。

数学公式

假设我们有一个多分类任务,有 ( C C C ) 个类别。对于一个样本:

  • ( y ^ \hat{y} y^ ) 是模型输出的概率分布,比如经过 Softmax 或 LogSoftmax 处理后的结果。
  • ( y y y ) 是真实类别,用索引表示(比如 2 表示第 2 类)。

nn.NLLLoss 的公式是:

NLL = − 1 N ∑ i = 1 N log ⁡ ( y ^ i , y i ) \text{NLL} = -\frac{1}{N} \sum_{i=1}^{N} \log(\hat{y}_{i, y_i}) NLL=N1i=1Nlog(y^i,yi)

  • ( N N N ):样本数量(batch size)。
  • ( y i y_i yi ):第 ( i i i ) 个样本的真实类别索引。
  • ( y ^ i , y i \hat{y}_{i, y_i} y^i,yi ):第 ( i i i ) 个样本在真实类别 ( y i y_i yi ) 上的预测概率(对数值)。

简单来说,nn.NLLLoss 取预测概率的对数(已经由 LogSoftmax 计算好),然后取负号,只关心正确类别的概率值。

2. 为什么搭配 LogSoftmax

你可能会注意到,nn.NLLLoss 的文档里总是提到“通常与 LogSoftmax 搭配使用”。这是为什么?

  • 模型输出:神经网络的最后一层通常输出未归一化的 logits(比如 [1.0, 2.0, 0.5]),而不是概率。
  • Softmax:将 logits 转为概率分布,比如 [0.2, 0.5, 0.3],满足 ( ∑ y ^ = 1 \sum \hat{y} = 1 y^=1)。公式是:
    y ^ j = e z j ∑ k = 1 C e z k \hat{y}_j = \frac{e^{z_j}}{\sum_{k=1}^{C} e^{z_k}} y^j=k=1Cezkezj
  • LogSoftmax:在 Softmax 基础上取对数,输出的是对数概率,比如 [-1.6, -0.7, -1.2]。公式是:
    log ⁡ ( y ^ j ) = z j − log ⁡ ( ∑ k = 1 C e z k ) \log(\hat{y}_j) = z_j - \log(\sum_{k=1}^{C} e^{z_k}) log(y^j)=zjlog(k=1Cezk)

nn.NLLLoss 要求输入是对数概率(log probabilities),而不是原始概率。所以:

  • 如果你直接给它 Softmax 后的概率,会出错,因为它期待的是 ( log ⁡ ( y ^ ) \log(\hat{y}) log(y^))。
  • LogSoftmax 处理后,输入正好符合要求,计算时直接取负号即可。
3. 代码使用示例

我们来看一个简单的例子,展示 nn.NLLLossLogSoftmax 的搭配:

import torch
import torch.nn as nn# 假设一个 3 分类任务,batch_size = 2
logits = torch.tensor([[1.0, 2.0, 0.5], [0.1, 0.5, 2.0]])  # 原始 logits
target = torch.tensor([1, 2])  # 真实类别索引,0~2# 定义 LogSoftmax 和 NLLLoss
log_softmax = nn.LogSoftmax(dim=1)  # dim=1 表示在类别维度上归一化
loss_fn = nn.NLLLoss()# 计算损失
log_probs = log_softmax(logits)  # 先转为对数概率
loss = loss_fn(log_probs, target)
print("NLL Loss:", loss.item())

运行过程

  1. logits[batch_size, num_classes] 的张量,表示每个样本在每个类别上的得分。
  2. nn.LogSoftmax 把 logits 转为对数概率,比如 [[-1.9, -0.9, -2.4], [-2.3, -1.9, -0.4]]
  3. nn.NLLLoss 提取每个样本在真实类别上的对数概率(比如第一个样本取 -0.9,第二个取 -0.4),取负并平均。

输出可能是 1.15,具体值取决于输入。

4. 与 nn.CrossEntropyLoss 的关系

你可能听说过 nn.CrossEntropyLoss,它也很常见。实际上:

  • nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss
    PyTorch 把这两步合二为一,直接接受 logits 作为输入,内部自动完成 LogSoftmax 和 NLL 计算。具体过程可以参考笔者的另一篇博客:Pytorch为什么 nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss?

代码对比:

# 用 nn.CrossEntropyLoss
ce_loss_fn = nn.CrossEntropyLoss()
ce_loss = ce_loss_fn(logits, target)
print("CrossEntropyLoss:", ce_loss.item())  # 与上面结果相同
  • 区别
    • nn.NLLLoss:输入是对数概率,需手动加 LogSoftmax
    • nn.CrossEntropyLoss:输入是 logits,自动处理。
5. 使用场景

nn.NLLLoss 适用于以下场景:

  • 多分类任务:比如图像分类(CIFAR-10 的 10 类)、文本分类。
  • 需要分离 Softmax 的情况
    • 你想在模型里显式控制 LogSoftmax 的位置,而不是交给损失函数。
    • 调试时单独检查对数概率的值。
  • 概率输出的模型:如果你的模型已经输出对数概率(比如某些预训练模型),直接用 nn.NLLLoss 更高效。

典型例子

  • 一个简单的 CNN 分类器:
    class SimpleCNN(nn.Module):def __init__(self):super().__init__()self.conv = nn.Conv2d(1, 16, 3)self.fc = nn.Linear(16 * 26 * 26, 10)  # 假设 28x28 输入self.log_softmax = nn.LogSoftmax(dim=1)def forward(self, x):x = self.conv(x)x = x.view(x.size(0), -1)x = self.fc(x)return self.log_softmax(x)model = SimpleCNN()
    loss_fn = nn.NLLLoss()
    
    这里模型输出对数概率,搭配 nn.NLLLoss 计算损失。
6. 注意事项
  • 输入形状
    • 输入:[batch_size, num_classes](对数概率)。
    • 目标:[batch_size](类别索引)。
  • 目标类型:必须是整数(long 类型),不能是 one-hot 或浮点数。
  • 数值稳定性LogSoftmax 比单独的 Softmax + log 更稳定,因为它避免了溢出问题。
7. 小结:nn.NLLLoss 的核心
  • 数学原理:计算正确类别对数概率的负值,最小化它等价于最大化似然。
  • 使用方式:搭配 LogSoftmax,输入对数概率,输出标量损失。
  • 场景:多分类任务,尤其是需要显式控制概率计算时。
  • CrossEntropyLoss 的关系:前者是后者的组成部分,功能更模块化。

nn.NLLLoss 就像一个“半成品”,需要你自己搭配 LogSoftmax,但这也给了你更多灵活性。相比直接用 nn.CrossEntropyLoss,它更适合喜欢拆解步骤或调试模型的开发者。

8. 调试小技巧
  • 检查输入:打印 log_probs 确保是对数概率(负值)。
  • 验证目标:确保 target 是整数,且范围在 [0, num_classes-1]
  • 对比结果:用 nn.CrossEntropyLoss 验证是否一致。

希望这篇博客让你对 nn.NLLLoss 有了全面认识!

后记

2025年2月28日18点59分于上海,在Grok3大模型辅助下完成。

相关文章:

PyTorch 的 nn.NLLLoss:负对数似然损失全解析

PyTorch 的 nn.NLLLoss:负对数似然损失全解析 在 PyTorch 的损失函数家族中,nn.NLLLoss(Negative Log Likelihood Loss,负对数似然损失)是一个不太起眼但非常重要的成员。它经常跟 LogSoftmax 搭配出现,尤…...

ROS2软件调用架构和机制解析:Publisher创建

术语 DDS (Data Distribution Service): 用于实时系统的数据分发服务标准,是ROS 2底层通信的基础RMW (ROS Middleware): ROS中间件接口,提供与具体DDS实现无关的抽象APIQoS (Quality of Service): 服务质量策略,控制通信的可靠性、历史记录、…...

vue2 以及vue3中 v-if和v-for是否可以同时使用

vue2以及vue3官方文档中都明确的指出 避免 v-if 和 v-for 用在一起 vue2 官方文档 解释 在 Vue 2 中,v-for 的优先级高于 v-if,也就是说,Vue 2 在渲染时,会先处理 v-for 生成列表项,再对子项判断 v-if 是否渲染。 …...

Hbase伪分布安装教程,详细版

注意Hbase版本与Hadoop版本的兼容,还有与JDK版本的兼容 本次用到的Hbase为2.4.6版本,Hadoop为3.1.3版本,JDK为JDK8 打开下面的网址查看兼容问题 Apache HBase Reference Guidehttps://hbase.apache.org/book.html#configuration 点击基础先…...

SSL: CERTIFICATE_VERIFY_FAILED Error in Python 是什么问题?

在最新版本的Stable Diffusion webui 版本上使用最新下载的模型时,出现了类似的错误。 SSL: CERTIFICATE_VERIFY_FAILED 错误在Python中通常表示你的程序试图通过HTTPS连接到某个服务器,但Python无法验证该服务器提供的SSL证书。这可能是因为以下几种原…...

15Metasploit框架介绍

metasploit目录结构 MSF ——the metasploit framework 的简称。MSF高度模块化,即框架结构由多个module组成,是全球最受欢迎的工具 是一筐开源安全漏洞利用和测试工具,集成了各种平台上常见的溢出漏洞和流行sheellcode,并且保持…...

【Qt】ffmpeg解码—照片提取、视频播放▲

目录 一、图像的成像原理: RGB成像原理: YUV成像原理: 二、多线程 三、ffmpeg解码(照片提取) 1.准备工作 (1)在工程文件夹里面新建三个文件夹 (2)在main函数中加…...

Springboot整合WebSocket+Redis以及微信小程序如何调用

一、 Springboot整合WebSocket 1. 引入socket依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency>引入依赖后需要刷新maven,Websocket的版本默认跟随S…...

HOW - 在Windows浏览器中模拟MacOS的滚动条

目录 一、原生 CSS 代码实现模拟 macOS 滚动条额外优化应用到某个特定容器 二、Antd table中的滚动条场景三、使用第三方工具/扩展 如果你想让 Windows 里的滚动条 模拟 macOS 的效果&#xff08;细窄、圆角、隐藏默认轨道&#xff09;。 可以使用以下几种方案&#xff1a; 一…...

openEuler环境下GlusterFS分布式存储集群部署指南

1.环境准备&#xff1a; os&#xff1a;openEuler 22.03 主机名 IP地址 主机用途 Rocky8192.168.121.160客户端 open-Euler1192.168.121.150节点1&#xff0c;提供两块6G硬盘open-Euler4192.168.121.153节点2&#xff0c;提供两块6G硬盘open-Euler5192.168.121.154 …...

C++学习(七)(标准库+STL(iotstream公司,日期/时间,器皿,算法,迭代器,多线程))

C 标准模板库 &#xff08;STL&#xff09; C 标准模板库 &#xff08;STL&#xff09; 是头文件的集合&#xff0c;提供了多种数据结构、算法和函数&#xff0c;以简化您的 C 编码体验。STL 的主要目的是通过提供一套现成的有用工具来节省时间并提高效率。STL 最常用的功能可…...

c高级第五天

1> 在终端提示输入一个成绩&#xff0c;通过shell判断该成绩的等级 [90,100] : A [80, 90) : B [70, 80) : C [60, 70) : D [0, 60) : 不及格 #!/bin/bash# 提示用户输入成绩 read -p "请输入成绩&#xff08;0-100&#xff09;&#xff1a;" score# 判断成…...

Windows上使用go-ios实现iOS17自动化

前言 在Windows上运行iOS的自动化&#xff0c;tidevice对于iOS17以上并不支持&#xff0c;原因是iOS 17 引入新通信协议 ‌RemoteXPCQUIC‌&#xff0c;改变了 XCUITest 的启动方式。 一、go-ios的安装 1、安装命令&#xff1a;npm i go-ios 2、安装完成后输入命令which io…...

迷你世界脚本小地图接口:Mapmark

小地图接口&#xff1a;Mapmark 彼得兔 更新时间: 2023-10-25 10:33:48 具体函数名及描述如下: 序号 函数名 函数描述 1 newShape(...) 新增一个形状(线&#xff0c;矩形&#xff0c;圆形) 2 deleteShape(...) 删除一个形状 3 setShapeColor(...) 设置…...

TMS320F28P550SJ9学习笔记1:CCS导入工程以及测试连接单片机仿真器

学习记录如何用 CCS导入工程以及测试连接单片机仿真器 以下为我的CCS 以及驱动库C2000ware 的版本 CCS版本&#xff1a; Code Composer Studio 12.8.1 C2000ware &#xff1a;C2000Ware_5_04_00_00 目录 CCS导入工程&#xff1a; 创建工程&#xff1a; 添加工程&#xff1a; C…...

为什么要提倡尽早返回(Early Return)

为什么要提倡尽早返回&#xff08;Early Return&#xff09; 在编程中&#xff0c;“尽早返回”&#xff08;Early Return&#xff09;是一种常被提倡的编程方式&#xff0c;特别是在需要提升代码可读性、减少嵌套层级、以及快速处理异常情况时。本文将讨论尽早返回的优点、应…...

Gartner发布安全运营指标构建指南

如何为安全运营指标构建坚实的基础 安全运营经理需要报告威胁检测、调查和响应计划的有效性&#xff0c;但难以驾驭大量潜在的 SOC 指标。本研究提供了设计针对 SOC 的指标系统的示例和实践。 主要发现 需要清晰、一致的衡量标准来向董事会成员或服务提供商等更广泛的团队传达…...

vue3:初学 vue-router 路由配置

承上一篇&#xff1a;nodejs&#xff1a;express js-mdict 作为后端&#xff0c;vue 3 vite 作为前端&#xff0c;在线查询英汉词典 安装 cnpm install vue-router -S 现在讲一讲 vue3&#xff1a;vue-router 路由配置 cd \js\mydict-web\src mkdir router cd router 我还…...

数据结构入门篇——什么是数据结构。

一、引入 工具是一种什么东西呢&#xff1f;是一种转化媒介&#xff0c;我们需要熟食&#xff0c;我们要通过用火来将生肉烤熟。在这个过程中。我们要输入一个东西——生肉&#xff0c;通过工具——火的加工&#xff0c;从而得到我们的目的产物——熟肉。 将上面的例子和红字部…...

uniapp+vue3搭建项目

工具使用&#xff1a; Pinia Vue 3 官方推荐的状态管理库&#xff0c;比 Vuex 更轻量&#xff0c;支持模块化&#xff0c;结合 persistedstate 插件可以持久化存储数据。uView-plus 专为 UniApp 设计&#xff0c;支持 App、小程序、H5。UnoCSS 更轻量&#xff0c;比 TailwindCS…...

unity大坐标抖动处理测试

第二幅图就是相机坐标是0 6360094 0的地方看见的模型&#xff0c;可以看见这个球体已经烂了 那么这里可以知道的是坐标太大了导致的&#xff0c;那么把所有物体共同偏移一下&#xff0c;即可得到第一幅图的效果&#xff0c;圆润的sphere又回来了 浮点数的计算是需要位数的&…...

CASAIM与承光电子达成深度合作,三维扫描逆向建模技术助力车灯设计与制造向数字化与智能化转型

近日&#xff0c;CASAIM与广州承光电子科技有限公司正式达成深度合作&#xff0c;CASAIM将为承光电子提供全方位的技术支持&#xff0c;包括高精度三维扫描设备、逆向建模软件以及定制化的技术解决方案。双方将共同组建技术团队&#xff0c;针对车灯设计中的难点进行攻关&#…...

C++类与对象:银行管理系统项目实战开发LeetCode每日一题

[Bank-Management-System]银行管理系统项目 以下是一个可运行的C银行账户类&#xff08;支持简单的存款/取款&#xff09;。后面会继续完善该项目&#xff1a; #include <iostream> #include <string> using namespace std;class Account{public://构造函数Accou…...

领域驱动设计:事件溯源架构简介

概述 事件溯源架构通常由3种应用设计模式组成,分别是:事件驱动(Event Driven),事件溯源(Event Source)、CQRS(读写分离)。这三种应用设计模式常见于领域驱动设计(DDD)中,但它们本身是一种应用设计的思想,不仅仅局限于DDD,每一种模式都可以单独拿出来使用。 E…...

景联文科技:以专业标注赋能AI未来,驱动智能时代的精准跃迁

在人工智能技术重塑全球产业格局的今天&#xff0c;高质量训练数据已成为驱动算法进化的核心燃料。作为数据智能服务领域的领军者&#xff0c;景联文科技深耕数据标注行业多年&#xff0c;以全栈式数据解决方案为核心&#xff0c;构建起覆盖数据采集、清洗、标注、质检及算法调…...

LeetCode 热题 100----1.两数之和

LeetCode 热题 100----1.两数之和 题目描述 我的解法 语言&#xff1a;js 思路就是&#xff1a;用双重循环去找哪两个数字相加等于target&#xff0c;目前的时间复杂度为O(n2)&#xff0c;之后右优化思路再更新。...

GIT 常用命令

/ 一、环境&#xff1a; ssh-keygen -t rsa -C "wangxiaoerqq.com.cn" 生成本地秘钥&#xff08;邮箱换成自己的邮箱&#xff09; 使用cat ~/.ssh/id_rsa.pub查看秘钥 git config --global user.name "wangxiaoer" git config --global wangxiaoerqq.…...

Netty笔记13:序列化

Netty笔记1&#xff1a;线程模型 Netty笔记2&#xff1a;零拷贝 Netty笔记3&#xff1a;NIO编程 Netty笔记4&#xff1a;Epoll Netty笔记5&#xff1a;Netty开发实例 Netty笔记6&#xff1a;Netty组件 Netty笔记7&#xff1a;ChannelPromise通知处理 Netty笔记8&#xf…...

IntelliJ IDEA 构建项目时内存溢出问题

问题现象 在使用 IntelliJ IDEA 构建 Java 项目时&#xff0c;遇到了以下错误&#xff1a; java: java.lang.OutOfMemoryError: Java heap space java.lang.RuntimeException: java.lang.OutOfMemoryError: Java heap space这是一个典型的 Java 堆内存不足错误&#xff0c;表…...

Asp.Net Core WebAPI开发教程(入门)

一、Asp.Net Core WebAPI项目创建 二、Asp.Net Core WebApi/Mvc路由定义 二、Asp.Net Core WebAPI 请求案例 Asp.Net WebApi Get请求整理&#xff08;一&#xff09; Asp.Net WebApi Post请求整理&#xff08;一&#xff09; Asp.Net WebApi Action命名中已‘Get’开头问题 …...

golang 内存对齐和填充规则

内存对齐和填充规则 对齐要求&#xff1a;每个数据类型的起始地址必须是其大小的倍数。 int8&#xff08;1字节&#xff09;&#xff1a;不需要对齐。int16&#xff08;2字节&#xff09;&#xff1a;起始地址必须是2的倍数。int32&#xff08;4字节&#xff09;&#xff1a;起…...

MySQL执行更新SQL流程

目录 1 redo log 2 binlog 3 Update执行逻辑 1 redo log InnoDB引擎特有日志MySQL的WAL&#xff08;Writing Ahead logging&#xff09;技术&#xff0c;预写式日志&#xff0c;先写日志再写磁盘当有一条记录需要更新时&#xff0c;InnoDB引擎就会先把记录写在redo log日志中&a…...

【时序预测】在线学习:算法选择(从线性模型到深度学习解析)

——如何为动态时序预测匹配最佳增量学习策略&#xff1f; 引言&#xff1a;在线学习的核心价值与挑战 在动态时序预测场景中&#xff08;如实时交通预测、能源消耗监控&#xff09;&#xff0c;数据以流式&#xff08;Streaming&#xff09;形式持续生成&#xff0c;且潜在的…...

CISC架构

基本概念 CISC 架构是一种计算机处理器设计架构&#xff0c;其设计理念与 RISC 架构相对。CISC 架构强调通过使用大量功能复杂的指令来增强计算机的处理能力&#xff0c;试图让计算机用一条指令就能完成较为复杂的操作&#xff0c;以减少程序中指令的总数&#xff0c;提高程序…...

Vue前端开发- Vant之Card组件

业务组件是Vant的一大特点&#xff0c;特别是针对移动端商城开发的业务&#xff0c;有许多组件可以直接运用到通用商城的开发中&#xff0c;代码也十分简单&#xff0c;大大加快了应用的开发速度。 在众多的业务组件中&#xff0c;Card 卡片、Coupon 优惠券选择器和SubmitBar …...

React Refs:深入理解与最佳实践

React Refs&#xff1a;深入理解与最佳实践 引言 在React中&#xff0c;refs是用于访问DOM元素或组件实例的一种方式。与类组件的ref属性不同&#xff0c;函数组件的ref需要使用useRef钩子。正确使用refs可以大大提升React应用的性能和可维护性。本文将深入探讨React Refs的原…...

Linux——基本指令

我们今天学习Linux最基础的指令 ls 指令 语法&#xff1a; ls [选项] [⽬录或⽂件] 功能&#xff1a;对于⽬录&#xff0c;该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件&#xff0c;将列出⽂件名以及其他信 息。 命令中的选项&#xff0c;一次可以传递多个 &#xff0c…...

【MySQL系列文章】Linux环境下安装部署MySQL

前言 本次安装部署主要针对Linux环境进行安装部署操作,系统位数64 getconf LONG_BIT 64MySQL版本&#xff1a;v5.7.38 一、下载MySQL MySQL下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 二、上传MySQL压缩包到Linuxx环境&#xff0c…...

【mysql】表信息无法获取与插入数据错误

一&#xff1a;无法获取表信息 处理流程分析 初始问题&#xff1a;get_room_member_list 函数调用后&#xff0c;未能收到预期的群成员列表回调 Error: not all arguments converted during string formatting 127.0.0.1 - - [26/Feb/2025 11:55:32] "POST / HTTP/1.1&qu…...

七、Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享)

Redis 内存管理详解:模型、优化策略(LRU/LFU、对象共享) Redis 以高性能和低延迟著称,但作为基于内存的数据库,内存管理是其核心问题之一。本文将深入解析 Redis 的内存模型、内存优化策略(包括 LRU/LFU 机制、对象共享等),帮助开发者提高 Redis 的存储效率和性能。 1…...

如何调试Linux内核?

通过创建一个最小的根文件系统&#xff0c;并使用QEMU和GDB进行调试。 1.准备工作环境 确保系统上安装了所有必要的工具和依赖项。 sudo apt-get update //更新一下软件包 sudo apt-get install build-essential git libncurses-dev bison flex libssl-dev qemu-system-x…...

Pywinauto Recorder: 将Windows操作转化为Python脚本,高效简易地实现操作自动化

Pywinauto Recorder是一个强大的UI自动化工具&#xff0c;它能够记录用户在Windows应用程序上的操作&#xff0c;并将其转换为可执行的Python脚本。这意味着你可以轻松地将重复性的GUI操作自动化&#xff0c;提高效率并降低人为错误。 什么是Pywinauto Recorder&#xff1f; …...

【AI大模型】DeepSeek + Kimi 高效制作PPT实战详解

目录 一、前言 二、传统 PPT 制作问题 2.1 传统方式制作 PPT 2.2 AI 大模型辅助制作 PPT 2.3 适用场景对比分析 2.4 最佳实践与推荐 三、DeepSeek Kimi 高效制作PPT操作实践 3.1 Kimi 简介 3.2 DeepSeek Kimi 制作PPT优势 3.2.1 DeepSeek 优势 3.2.2 Kimi 制作PPT优…...

Spring统一格式返回

目录 一&#xff1a;统一结果返回 1&#xff1a;统一结果返回写法 2&#xff1a;String类型报错问题 解决方法 二&#xff1a;统一异常返回 统一异常返回写法 三&#xff1a;总结 同志们&#xff0c;今天咱来讲一讲统一格式返回啊&#xff0c;也是好久没有讲过统一格式返…...

【商城实战(2)】商城架构设计:从底层逻辑到技术实现

【商城实战】专栏重磅来袭&#xff01;这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建&#xff0c;运用 uniapp、Element Plus、SpringBoot 搭建商城框架&#xff0c;到用户、商品、订单等核心模块开发&#xff0c;再到性能优化、安全加固、多端适配&#xf…...

Netty笔记6:Netty组件

Netty笔记1&#xff1a;线程模型 Netty笔记2&#xff1a;零拷贝 Netty笔记3&#xff1a;NIO编程 Netty笔记4&#xff1a;Epoll Netty笔记5&#xff1a;Netty开发实例 Netty笔记6&#xff1a;Netty组件 Netty笔记7&#xff1a;ChannelPromise通知处理 Netty笔记8&#xf…...

大模型学习笔记------Llama 3模型架构简介

大模型学习笔记------Llama 3模型架构 1、整体网络结构2、主要创新点3、其他关键改进点 LLaMA(Large Language Model Meta AI)系列模型是Meta发布并开源&#xff0c;分别在2023年2月、2023年7月和2024年4月发布了经历了LLaMA 1、LLaMA 2和LLaMA 3模型。本文只讲相对比较成熟、性…...

DeepSeek本地接口调用(Ollama)

前言 上篇博文&#xff0c;我们通过Ollama搭建了本地的DeepSeek模型&#xff0c;本文主要是方便开发人员&#xff0c;如何通过代码或工具&#xff0c;通过API接口调用本地deepSeek模型 前文&#xff1a;DeepSeek-R1本地搭建_deepseek 本地部署-CSDN博客 注&#xff1a;本文不仅…...

C语言:51单片机 基础知识

一、单片机概述 单片机的组成及其特点 单片机是指在一块芯片上集成了CPU、ROM、RAM、定时器/计数器和多种I/O接口电路等&#xff0c;具有一定规模的微型计算机。 特点&#xff1a; 1、单片机的存储器以ROM、RAM严格分工。 2、采用面向控制的指令系统。 3、单片机的I/O口引脚通…...

DAIR-V2X-R数据集服务器下载

【官方github链接】https://github.com/ylwhxht/V2X-R 点击并登录 选择并点击下载 浏览器弹窗&#xff0c;右键选择复制下载链接 ------------------------------------服务器下载----------------------------------------- 登录服务器&#xff0c;选在要下载的文件夹复制路…...