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

Pytorch为什么 nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss?

为什么 nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss

在使用 PyTorch 时,我们经常听说 nn.CrossEntropyLossLogSoftmaxnn.NLLLoss 的组合。这句话听起来简单,但背后到底是怎么回事?为什么这两个分开的功能加起来就等于一个完整的交叉熵损失?今天我们就从数学公式到代码实现,彻底搞清楚它们的联系。

1. 先认识三个主角

要理解这个等式,先得知道每个部分的定义和作用:

  • nn.CrossEntropyLoss:交叉熵损失,直接接受未归一化的 logits,计算模型预测与真实标签的差距,适用于多分类任务。
  • LogSoftmax:将 logits 转为对数概率(log probabilities),输出范围是负值。
  • nn.NLLLoss:负对数似然损失,接受对数概率,计算正确类别的负对数值。

表面上看,nn.CrossEntropyLoss 是一个独立的损失函数,而 LogSoftmaxnn.NLLLoss 是两步操作。为什么说它们本质上是一回事呢?答案藏在数学公式和计算逻辑里。

2. 数学上的拆解

让我们从交叉熵的定义开始,逐步推导。

(1) 交叉熵的数学形式

交叉熵(Cross-Entropy)衡量两个概率分布的差异。在多分类任务中:

  • ( p p p ):真实分布,通常是 one-hot 编码(比如 [0, 1, 0] 表示第 1 类)。
  • ( q q q ):预测分布,是模型输出的概率(比如 [0.2, 0.5, 0.3])。

交叉熵公式为:

H ( p , q ) = − ∑ c = 1 C p c log ⁡ ( q c ) H(p, q) = -\sum_{c=1}^{C} p_c \log(q_c) H(p,q)=c=1Cpclog(qc)

对于 one-hot 编码,( p c p_c pc ) 在正确类别上为 1,其他为 0,所以简化为:

H ( p , q ) = − log ⁡ ( q correct ) H(p, q) = -\log(q_{\text{correct}}) H(p,q)=log(qcorrect)

其中 ( q correct q_{\text{correct}} qcorrect ) 是正确类别对应的预测概率。对 ( N N N ) 个样本取平均,损失为:

Loss = − 1 N ∑ i = 1 N log ⁡ ( q i , y i ) \text{Loss} = -\frac{1}{N} \sum_{i=1}^{N} \log(q_{i, y_i}) Loss=N1i=1Nlog(qi,yi)

这正是交叉熵损失的核心。

(2) 从 logits 到概率

神经网络输出的是原始分数(logits),比如 ( z = [ z 1 , z 2 , z 3 ] z = [z_1, z_2, z_3] z=[z1,z2,z3] )。要得到概率 ( q q q ),需要用 Softmax:

q j = e z j ∑ k = 1 C e z k q_j = \frac{e^{z_j}}{\sum_{k=1}^{C} e^{z_k}} qj=k=1Cezkezj

交叉熵损失变成:

Loss = − 1 N ∑ i = 1 N log ⁡ ( e z i , y i ∑ k = 1 C e z i , k ) \text{Loss} = -\frac{1}{N} \sum_{i=1}^{N} \log\left(\frac{e^{z_{i, y_i}}}{\sum_{k=1}^{C} e^{z_{i,k}}}\right) Loss=N1i=1Nlog(k=1Cezi,kezi,yi)

这就是 nn.CrossEntropyLoss 的数学形式。

(3) 分解为两步

现在我们把这个公式拆开:

  • 第一步:LogSoftmax
    计算对数概率:
    log ⁡ ( q j ) = log ⁡ ( e z j ∑ k = 1 C e z k ) = z j − log ⁡ ( ∑ k = 1 C e z k ) \log(q_j) = \log\left(\frac{e^{z_j}}{\sum_{k=1}^{C} e^{z_k}}\right) = z_j - \log\left(\sum_{k=1}^{C} e^{z_k}\right) log(qj)=log(k=1Cezkezj)=zjlog(k=1Cezk)
    这正是 LogSoftmax 的定义。它把 logits ( z z z ) 转为对数概率 ( log ⁡ ( q ) \log(q) log(q) )。

  • 第二步:NLLLoss
    有了对数概率 ( log ⁡ ( q ) \log(q) log(q) ),取出正确类别的值,取负号并平均:
    NLL = − 1 N ∑ i = 1 N log ⁡ ( q i , y i ) \text{NLL} = -\frac{1}{N} \sum_{i=1}^{N} \log(q_{i, y_i}) NLL=N1i=1Nlog(qi,yi)
    这就是 nn.NLLLoss 的公式。

组合起来

  • LogSoftmax 把 logits 转为 ( log ⁡ ( q ) \log(q) log(q) )。
  • nn.NLLLoss 对 ( log ⁡ ( q ) \log(q) log(q) ) 取负号,计算损失。
  • 两步合起来正好是 ( − log ⁡ ( q correct ) -\log(q_{\text{correct}}) log(qcorrect) ),与交叉熵一致。
3. PyTorch 中的实现验证

从数学上看,nn.CrossEntropyLoss 的确可以分解为 LogSoftmaxnn.NLLLoss。我们用代码验证一下:

import torch
import torch.nn as nn# 输入数据
logits = torch.tensor([[1.0, 2.0, 0.5], [0.1, 0.5, 2.0]])  # [batch_size, num_classes]
target = torch.tensor([1, 2])  # 真实类别索引# 方法 1:直接用 nn.CrossEntropyLoss
ce_loss_fn = nn.CrossEntropyLoss()
ce_loss = ce_loss_fn(logits, target)
print("CrossEntropyLoss:", ce_loss.item())# 方法 2:LogSoftmax + nn.NLLLoss
log_softmax = nn.LogSoftmax(dim=1)
nll_loss_fn = nn.NLLLoss()
log_probs = log_softmax(logits)  # 计算对数概率
nll_loss = nll_loss_fn(log_probs, target)
print("LogSoftmax + NLLLoss:", nll_loss.item())

运行结果:两个输出的值完全相同(比如 0.75)。这证明 nn.CrossEntropyLoss 在内部就是先做 LogSoftmax,再做 nn.NLLLoss

4. 为什么 PyTorch 这么设计?

既然 nn.CrossEntropyLoss 等价于 LogSoftmax + nn.NLLLoss,为什么 PyTorch 提供了两种方式?

  • 便利性
    nn.CrossEntropyLoss 是一个“一体式”工具,直接输入 logits 就能用,适合大多数场景,省去手动搭配的麻烦。

  • 模块化
    LogSoftmaxnn.NLLLoss 分开设计,给开发者更多灵活性:

    • 你可以在模型里加 LogSoftmax,只用 nn.NLLLoss 计算损失。
    • 可以单独调试对数概率(比如打印 log_probs)。
    • 在某些自定义损失中,可能需要用到独立的 LogSoftmax
  • 数值稳定性
    nn.CrossEntropyLoss 内部优化了计算,避免了分开操作时可能出现的溢出问题(比如 logits 很大时,Softmax 的分母溢出)。

5. 为什么不直接用 Softmax?

你可能好奇:为什么不用 Softmax + 对数 + 取负,而是用 LogSoftmax
答案是数值稳定性:

  • 单独计算 Softmax(指数运算)可能导致溢出(比如 ( e 1000 e^{1000} e1000 ))。
  • LogSoftmax 把指数和对数合并为 ( z j − log ⁡ ( ∑ e z k ) z_j - \log(\sum e^{z_k}) zjlog(ezk) ),计算更稳定。
6. 使用场景对比
  • nn.CrossEntropyLoss

    • 输入:logits。
    • 场景:标准多分类任务(图像分类、文本分类)。
    • 优点:简单直接。
  • LogSoftmax + nn.NLLLoss

    • 输入:logits 需手动转为对数概率。
    • 场景:需要显式控制 Softmax,或者模型已输出对数概率。
    • 优点:灵活性高。
7. 小结:为什么等价?
  • 数学上:交叉熵 ( − log ⁡ ( q correct ) -\log(q_{\text{correct}}) log(qcorrect) ) 可以拆成两步:
    1. LogSoftmax:从 logits 到 ( log ⁡ ( q ) \log(q) log(q) )。
    2. nn.NLLLoss:从 ( log ⁡ ( q ) \log(q) log(q) ) 到 ( − log ⁡ ( q correct ) -\log(q_{\text{correct}}) log(qcorrect) )。
  • 实现上nn.CrossEntropyLoss 把这两步封装成一个函数,结果一致。
  • 设计上:PyTorch 提供两种方式,满足不同需求。

所以,nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss 不是巧合,而是交叉熵计算的自然分解。理解这一点,能帮助你更灵活地使用 PyTorch 的损失函数。

8. 彩蛋:手动推导

想自己验证?试试手动计算:

  • logits [1.0, 2.0, 0.5],目标是 1。
  • Softmax:[0.23, 0.63, 0.14]
  • LogSoftmax:[-1.47, -0.47, -1.97]
  • NLL:-(-0.47) = 0.47
  • 直接用 nn.CrossEntropyLoss,结果一样!

希望这篇博客解开了你的疑惑!

后记

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

相关文章:

Pytorch为什么 nn.CrossEntropyLoss = LogSoftmax + nn.NLLLoss?

为什么 nn.CrossEntropyLoss LogSoftmax nn.NLLLoss? 在使用 PyTorch 时,我们经常听说 nn.CrossEntropyLoss 是 LogSoftmax 和 nn.NLLLoss 的组合。这句话听起来简单,但背后到底是怎么回事?为什么这两个分开的功能加起来就等于…...

Linux实操——在服务器上直接从百度网盘下载(/上传)文件

Linux Linux实操——在服务器上直接从百度网盘下载(/上传)文件 文章目录 Linux前言一、下载并安装bypy工具二、认证并授权网盘账号三、将所需文件转移至目的文件夹下四、下载文件五、上传文件六、更换绑定的百度云盘账户 前言 最近收到一批很大的数据&…...

【无标题】ABP更换MySql数据库

原因:ABP默认使用的数据库是sqlServer,本地没有安装sqlServer,安装的是mysql,需要更换数据库 ABP版本:9.0 此处以官网TodoApp项目为例 打开EntityFrameworkCore程序集,可以看到默认使用的是sqlServer&…...

nuxt常用组件库html-validator应用解析

html-validator 主要用于自动验证nuxt服务器呈现的HTML(SSR和SSG),以检测可能导致水合错误的HTML常见问题,有助于减少水合错误,检测常见的可访问性错误。 安装 npx nuxilatest module add html-validator配置 若自动更新nuxt.config.ts配置文…...

思维训练(算法+技巧)

1.深度优先搜索:暴力求解,适合判断能不能走出迷宫 利用递归,有一个check【】数组来检查该节点是否经过 for循环该节点的邻接节点(存在且没被访问),递归DFS(该节点的某个邻接节点) D…...

AIGC(生成式AI)试用 25 -- 跟着清华教程学习 - DeepSeek+DeepResearch让科研像聊天一样简单

目标:继续学习,以DeepSeek为主 个人理解: - 模型结合,充分发挥各模型的优势 - 关注应用,弱化理论,了解就好 - 多模态:多模态(Multimodality)是指结合多种不同类型的数据…...

Solr中得Core和Collection的作用和关系

Solr中得Core和Collection的作用和关系 一, 总结 在Apache Solr中,Core和Collection 是两个核心概念,他们分别用于单机模式和分布式模式(SolrCloud)中,用于管理和组织数据。 二,Core 定义&am…...

温湿度监控设备融入智慧物联网

当医院的温湿度监控设备融入智慧物联网,将会带来许多新的体验,可以帮助医院温湿度监控设备智能化管理,实现设备之间的互联互通,方便医院对温湿度数据进行统一管理和分析。 添加智慧物联网技术,实现对医院温湿度的实时…...

软件测试的七大误区

随着软件测试对提高软件质量重要性的不断提高,软件测试也不断受到重视。但是,国内软件测试过程的不规范,重视开发和轻视测试的现象依旧存在。因此,对于软件测试的重要性、测试方法和测试过程等方面都存在很多不恰当的认识&#xf…...

Mac 版 本地部署deepseek ➕ RAGflow 知识库搭建流程分享(附问题解决方法)

安装: 1、首先按照此视频的流程一步一步进行安装:(macos版)ragflowdeepseek 私域知识库搭建流程分享_哔哩哔哩_bilibili 2、RAGflow 官网文档指南:https://ragflow.io 3、RAGflow 下载地址:https://github.com/infi…...

标记符号“<”和“>”符号被称为“尖括号”或“角括号”

你提到的“<”和“>”符号被称为“尖括号”或“角括号”。它们常用于编程语言中表示类型参数&#xff08;如泛型&#xff09;、HTML标签&#xff08;如<div>&#xff09;、数学中的不等式&#xff08;如< 5&#xff09;等。 好的&#xff0c;我来用通俗的方式解…...

DMA发送全部历史记录数据到串口

背景 博主参与的项目中&#xff0c;有个读取全部历史记录的功能&#xff0c;如果下位机在主程序中将全部历史记录单纯地通过串口传输会比较占用cpu资源&#xff0c;影响主程序中别的功能。最后商量得出以下实现方案&#xff1a; 定义两个发送缓冲区DMATxbuf1和DMATxbuf2&…...

js基础案例

1.弹出警告框&#xff0c;显示Hello JS 2.在页面输出内容&#xff08;内容在body标签里面&#xff09; 3.在控制台输出内容 4.js代码是自上而下执行 5.将js代码编写到标签的onclick属性中&#xff0c;当点击时&#xff0c;js代码才会执行 6.将js写到超链接的href属性中&#xf…...

机器学习之集成学习思维导图

学习笔记—机器学习-集成学习思维导图 20250227&#xff0c;以后复习看&#xff08;周老师的集成学习&#xff09; PS&#xff1a;图片看不清&#xff0c;可以下载下来看。 往期思维导图&#xff1a; 机器学习之集成学习Bagging&#xff08;随机深林、VR-树、极端随机树&…...

学生考勤请假管理系统

在当今信息化时代&#xff0c;传统的纸质考勤和请假管理方式已难以满足高校日益增长的管理需求。手工记录效率低下、容易出错&#xff0c;且难以进行数据统计和分析&#xff0c;无法为教学管理提供有效的决策支持。因此&#xff0c;开发一套高效、便捷、安全的学生考勤请假管理…...

算法之领域算法

领域算法 ♥一些领域算法知识体系♥ | Java 全栈知识体系...

服务 ‘Sql Server VSS writer‘ (SQLWriter) 在安装 LocalDB 时无法启动

安装Microsoft Visual C 2015-2019 Redistributable (x64)...

GDidees CMS v3.9.1本地文件泄露漏洞(CVE-2023-27179)

漏洞简介&#xff1a; GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞&#xff0c;漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。 漏洞环境&#xff1a; 春秋云镜中的漏洞靶标&#xff0c;CVE编号为CVE-2023-27179 漏洞复现: 进入靶场发现没…...

PyQT(PySide)的上下文菜单策略设置setContextMenuPolicy()

在 Qt 中&#xff0c;QWidget 类提供了几种不同的上下文菜单策略&#xff0c;这些策略通过 Qt::ContextMenuPolicy 枚举类型来定义&#xff0c;用于控制控件&#xff08;如按钮、文本框等&#xff09;在用户右键点击时如何显示上下文菜单。 以下是 Qt::ContextMenuPolicy 枚举中…...

【AI深度学习基础】NumPy完全指南进阶篇:核心功能与工程实践(含完整代码)

NumPy系列文章 入门篇进阶篇终极篇 一、引言 在掌握NumPy基础操作后&#xff0c;开发者常面临真实工程场景中的三大挑战&#xff1a;如何优雅地处理高维数据交互&#xff1f;如何在大规模计算中实现内存与性能的平衡&#xff1f;怎样与深度学习框架实现高效协同&#xff1f;…...

爬虫获取微店商品快递费 item_feeAPI 接口的完整指南

在电商运营中&#xff0c;快递费用的计算是影响用户体验和商家成本的重要因素。通过获取快递费数据&#xff0c;商家可以优化定价策略、提升用户体验&#xff0c;甚至实现个性化的营销方案。本文将详细介绍如何通过爬虫技术调用微店的快递费 API 接口&#xff0c;获取商品的快递…...

etcd 3.15 三节点集群管理指南

本文档旨在提供 etcd 3.15 版本的三节点集群管理指南&#xff0c;涵盖节点的新增、删除、状态检查、数据库备份和恢复等操作。 1. 环境准备 1.1 系统要求 操作系统&#xff1a;Linux&#xff08;推荐 Ubuntu 18.04 或 CentOS 7&#xff09; 内存&#xff1a;至少 2GB 磁盘&a…...

Python 数据可视化(一)熟悉Matplotlib

目录 一、安装包 二、先画个折线图 1、修改标签文字和线条粗细 2、内置样式 3、scatter() 绘制散点图 4、scatter() 绘制多个点 5、设置样式 6、保存绘图 数据可视化指的是通过可视化表示来探索和呈现数据集内的规律。 一、安装包 win R 打开终端 安装 Matplotlib&…...

使用自动化运维工具 Ansible 集中化管理服务器

一、概述 Ansible 是一款为类 Unix 系统开发的自由开源的配置和自动化工具 官方网站:https://www.ansible.com/ Ansible 成立于 2013 年,总部设在北卡罗来纳州达勒姆,联合创始人 ad Ziouani 和高级副总裁 Todd Barr都是红帽的老员工。Ansible 旗下的开源软件 Ansible 十分…...

STL 算法库中的 min_element 和 max_element

在 C STL中&#xff0c;min_element 和 max_element 是两个非常实用的算法函数&#xff0c;用于快速找到容器或范围内的最小值和最大值&#xff0c;这里以min为例。 头文件&#xff1a;<algorithm> 语法&#xff1a; template <class ForwardIterator> ForwardIt…...

YOLOv11-ultralytics-8.3.67部分代码阅读笔记-ops.py

ops.py ultralytics\models\utils\ops.py 目录 ops.py 1.所需的库和模块 2.class HungarianMatcher(nn.Module): 3.def get_cdn_group(batch, num_classes, num_queries, class_embed, num_dn100, cls_noise_ratio0.5, box_noise_scale1.0, trainingFalse): 1.所需的库…...

翻译: 深入分析LLMs like ChatGPT 一

大家好&#xff0c;我想做这个视频已经有一段时间了。这是一个全面但面向普通观众的介绍&#xff0c;介绍像ChatGPT这样的大型语言模型。我希望通过这个视频让大家对这种工具的工作原理有一些概念性的理解。 首先&#xff0c;我们来谈谈你在这个文本框里输入内容并点击回车后背…...

【1162. 地图分析 中等】

题目&#xff1a; 你现在手里有一份大小为 n x n 的 网格 grid&#xff0c;上面的每个 单元格 都用 0 和 1 标记好了。其中 0 代表海洋&#xff0c;1 代表陆地。 请你找出一个海洋单元格&#xff0c;这个海洋单元格到离它最近的陆地单元格的距离是最大的&#xff0c;并返回该…...

PyQT6是干啥的?

PyQt6 是一个用于创建图形用户界面&#xff08;GUI&#xff09;的 Python 库&#xff0c;基于 Qt 框架。它允许开发者用 Python 编写跨平台的桌面应用程序&#xff0c;支持 Windows、macOS 和 Linux 等操作系统。 主要功能 GUI 开发&#xff1a;提供丰富的控件&#xff08;如按…...

华为云之使用鲲鹏弹性云服务器部署Node.js环境【玩转华为云】

华为云之使用鲲鹏弹性云服务器部署Node.js环境【玩转华为云】 一、本次实践介绍1.1 实践环境简介1.3 本次实践完成目标 二、 相关服务介绍2.1 华为云ECS云服务器介绍2.2 Node.js介绍 三、环境准备工作3.1 预置实验环境3.2 查看预置环境信息 四、登录华为云4.1 登录华为云4.2 查…...

PyCharm怎么集成DeepSeek

PyCharm怎么集成DeepSeek 在PyCharm中集成DeepSeek等大语言模型(LLM)可以借助一些插件或通过代码调用API的方式实现,以下为你详细介绍两种方法: 方法一:使用JetBrains AI插件(若支持DeepSeek) JetBrains推出了AI插件来集成大语言模型,不过截至2024年7月,官方插件主要…...

NFC拉起微信小程序申请URL scheme 汇总

NFC拉起微信小程序&#xff0c;需要在微信小程序开发里边申请 URL scheme &#xff0c;审核通过后才可以使用NFC标签碰一碰拉起微信小程序 有不少人被难住了&#xff0c;从微信小程序开发社区汇总了以下信息&#xff0c;供大家参考 第一&#xff0c;NFC标签打开小程序 https://…...

使用Docker方式一键部署MySQL和Redis数据库详解

一、前言 数据库是现代应用开发中不可或缺的一部分&#xff0c;MySQL和Redis作为两种广泛使用的数据库系统&#xff0c;分别用于关系型数据库和键值存储。本文旨在通过Docker和Docker Compose的方式&#xff0c;提供一个简洁明了的一键部署方案&#xff0c;确保数据库服务的稳…...

spring注解开发(Spring整合MyBatis——Mapper代理开发模式、(Spring、MyBatis、Jdbc)配置类)(6)

目录 一、纯MyBatis独立开发程序。 &#xff08;1&#xff09;数据库与数据表。 &#xff08;2&#xff09;实体类。 &#xff08;3&#xff09;dao层接口。&#xff08;Mapper代理模式、无SQL映射文件——注解配置映射关系&#xff09; &#xff08;4&#xff09;MyBatis核心配…...

Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程

Redisson 是一个高性能的 Java Redis 客户端&#xff0c;提供了丰富的分布式工具集&#xff0c;如分布式锁、Map、Queue 等&#xff0c;帮助开发者简化 Redis 的操作。在集成 Redisson 到项目时&#xff0c;开发者通常有两种选择&#xff1a; 使用 Redisson 原始依赖。使用 Re…...

Maven中一些基础知识点

早些时候只知道创建或者开发springboot项目时候&#xff0c;有一个叫pom.xml的文件可以用来管理项目所需的依赖/第三方工具。 索性稍微深入了解了一下&#xff0c;然后把自己认为重要的记录下来。 首先我们要引入新的依赖自然是在dependencies下写dependency&#xff0c;这个…...

塑造网络安全的关键事件

注&#xff1a;本文为 “网络安全” 相关文章合辑。 机翻&#xff0c;未校。 Timeline of Cyber Security: Key Events that Shaped the Field 网络安全时间表&#xff1a;塑造该领域的关键事件 October 29, 2023 Cyberattacks are an everyday threat, always changing. T…...

前端项目打包生成 JS 文件的核心步骤

前端项目打包生成 JS 文件的过程通常涉及以下核心步骤&#xff0c;以主流工具&#xff08;如 Webpack、Vite、Rollup 等&#xff09;为例&#xff1a; 一、项目准备阶段 项目结构 源代码目录&#xff08;如 src/&#xff09;包含 JS/TS、CSS、图片等资源配置文件&#xff08;pa…...

【Pandas】pandas Series fillna

Pandas2.2 Series Computations descriptive stats 方法描述Series.backfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值&#xff08;NaN&#xff09;的方法Series.bfill(*[, axis, inplace, limit, …])用于填充 Series 中缺失值&#xff08;NaN&#xff09;的…...

微信小程序自定义导航栏实现指南

文章目录 微信小程序自定义导航栏实现指南一、自定义导航栏的需求分析二、代码实现1. WXML 结构2. WXSS 样式样式解析:3. JavaScript 逻辑三、完整代码示例四、注意事项与优化建议五、总结微信小程序自定义导航栏实现指南 在微信小程序开发中,默认的导航栏样式可能无法满足所…...

GitCode 助力 python-office:开启 Python 自动化办公新生态

项目仓库&#xff1a;https://gitcode.com/CoderWanFeng1/python-office 源于需求洞察&#xff0c;打造 Python 办公神器 项目作者程序员晚枫在运营拥有 14w 粉丝的 B 站账号 “Python 自动化办公社区” 时&#xff0c;敏锐察觉到非程序员群体对 Python 学习的强烈需求。在数字…...

C#开发的Base64编码及解码完整源码及注意事项

在软件开发时&#xff0c;经常用Base64编码和解码功能。本文介绍一个简单易用的Base64 编码和解码工具&#xff0c;顾名思义&#xff0c;就是简单快捷地进行 Base64 代码的解码或编码操作。您的数据可以轻松地编码为 Base64 编码&#xff0c;也可以解码为可读的格式。传输数据时…...

deepseek部署:ELK + Filebeat + Zookeeper + Kafka

## 1. 概述 本文档旨在指导如何在7台机器上部署ELK&#xff08;Elasticsearch, Logstash, Kibana&#xff09;堆栈、Filebeat、Zookeeper和Kafka。该部署方案适用于日志收集、处理和可视化场景。 ## 2. 环境准备 ### 2.1 机器分配 | 机器编号 | 主机名 | IP地址 | 部署组件 |-…...

[密码学实战]Java实现国密(SM2)密钥协商详解:原理、代码与实践

一、代码运行结果 二、国密算法与密钥协商背景 2.1 什么是国密算法? 国密算法是由中国国家密码管理局制定的商用密码标准,包括: SM2:椭圆曲线公钥密码算法(非对称加密/签名/密钥协商)SM3:密码杂凑算法(哈希)SM4:分组密码算法(对称加密)2.2 密钥协商的意义 在安全…...

STM32学习——RTC实时时钟(BKP与RTC外设)

RTC实时时钟 RTC实时时钟 想记录或读取日期和事件&#xff0c;就可以通过操作RTC实现 RTC与BKP和PWR经常同时出现 一般情况下&#xff0c;VBTA是电池供电口&#xff0c;需要接备用电池 在BKP备份寄存器写入两个数据&#xff0c;然后再读出之后显示&#xff0c;BKP的数据&a…...

SQL打折日期交叉问题

1. 数据结构&#xff1a;数据为平台商品促销数据 表名&#xff1a;good_promotion 字段名&#xff1a;brand&#xff08;品牌&#xff09;、stt&#xff08;打折开始日期&#xff09;、edt&#xff08;打折结束日期&#xff09;。 2. 需求&#xff1a; ① 创建表 ② 计算每个…...

智能机器人加速进化:AI大模型与传感器的双重buff加成

Deepseek不仅可以在手机里为你解答现在的困惑、占卜未来的可能&#xff0c;也将成为你的贴心生活帮手&#xff01; 2月21日&#xff0c;追觅科技旗下Dreamehome APP正式接入DeepSeek-R1大模型&#xff0c;2月24日发布的追觅S50系列扫地机器人也成为市面上首批搭载DeepSeek-R1的…...

AI大模型-提示工程学习笔记21-图提示 (Graph Prompting)

目录 1. 图提示的核心思想 (1) 传统提示的局限性 (2) Graph Prompting 的解决方案 2. Graph Prompting 的工作流程 (1) 图构建 (2) 图选择/子图提取 (3) 图编码 (4) 提示构建 (5) LLM 推理与生成 3. Graph Prompting 的关键组件 (1) 大语言模型 (LLM) (2) 图数据库…...

C++ 中的 for 循环语句教程

摘要 for 循环是 C 中最常用的循环结构之一&#xff0c;用于重复执行一段代码&#xff0c;直到满足特定条件。它特别适合在已知循环次数的情况下使用。本教程将详细介绍 for 循环的语法、用法以及一些常见示例。 1. for 循环的基本语法 for 循环的语法如下&#xff1a; for …...

UniApp 中封装 HTTP 请求与 Token 管理(附Demo)

目录 1. 基本知识2. Demo3. 拓展 1. 基本知识 从实战代码中学习&#xff0c;上述实战代码来源&#xff1a;芋道源码/yudao-mall-uniapp 该代码中&#xff0c;通过自定义 request 函数对 HTTP 请求进行了统一管理&#xff0c;并且结合了 Token 认证机制 请求封装原理&#xff…...