神经网络 - 关于简单的激活函数的思考总结
最近一直在学习神经网络,有一些收获,也有一些迷惑,所以驻足思考:为什么简单的激活函数如sigmoid函数、ReLU函数,当应用在神经网络的模型中,却可以实现对现实世界复杂的非线性关系的模拟呢?本文我们来进行理解其中的原理。
一、神经网络与简单的激活函数
神经网络使用激活函数的主要原因在于它们引入了非线性变换,使得网络具备逼近复杂函数和建模非线性关系的能力。下面详细解释这一点,并探讨为什么常用的激活函数往往比较简单,而不是更复杂的非线性函数。
1. 为什么使用激活函数
-
非线性建模能力
如果网络中只使用线性变换(矩阵乘法和加法),无论网络有多少层,整体仍然只能表示一个线性变换,这严重限制了模型的表达能力。激活函数通过在每层中引入非线性变化,使得多层网络可以构造出复杂的非线性映射,满足逼近任意连续函数的要求(正如通用逼近定理所示)。 -
层与层之间的信息转换
激活函数使得每层神经元的输出不再是输入的简单线性组合,而是经过非线性转换后传递下去。这种非线性作用能够捕捉数据中更细粒度、复杂的特征变化和模式。 -
控制输出范围和稳定训练
例如,tanh将输出限定在 [−1,1] 内,而 sigmoid 限定在 [0,1] 内,这种约束可以防止数值在网络中无限增长,也有助于保持梯度在合理范围内,从而促进模型训练的稳定性。
2. 为什么激活函数通常比较简单?
-
计算效率
简单的激活函数(如 ReLU、sigmoid、tanh)在数学上形式简洁,计算量小,能够在大量数据和深层网络中高效运行。复杂的函数如果计算耗时较长,会降低模型训练和推理的效率,尤其在大规模应用场景下,简单高效的函数更为实用。 -
梯度求导便利性
激活函数在反向传播中的导数是关键因素。简单函数具有简单且易于计算的导数,确保梯度能够被有效传递。较复杂的函数可能会产生复杂的导数表达式,导致梯度计算和优化更为困难,甚至可能引发数值不稳定问题。 -
经验验证与效果
数十年来,研究和实践表明这些简单的激活函数已经足够强大,能够与深度网络的层级结构配合,逼近非常复杂的函数。简单激活函数在许多任务上取得了优异的效果,并且具有较好的泛化性能,所以大部分模型选择它们而不是复杂的函数。 -
稳定性和可调性
激活函数不仅需要非线性,还需要在训练过程中保持良好的梯度流(避免梯度消失或爆炸)。一些复杂的非线性函数可能理论上能够提供更丰富的表达,但它们往往对权重初始化、正则化等更为敏感,不容易调优。简单的激活函数已经在各种任务中经过验证,表现出较好的稳定性和鲁棒性。
3. 举个例子说明
假设我们设计一个简单的两层神经网络来拟合非线性函数 y=sin(x)。网络结构如下:
-
输入 x 经过第一层线性变换:z1=W1x+b1
-
使用激活函数(例如 tanh)得到第一层输出:a1=tanh(z1)
-
接着第二层线性变换:z2=W2a1+b2
-
最终输出:y^=z2
如果没有激活函数,整个网络计算就是一系列线性变换,最终结果是线性的,无法拟合 sin(x) 这样的非线性函数。但由于我们在第一层引入了 tanh 非线性变换,输出 a1 是输入的非线性表达,接着第二层再做线性组合,整体效果可以逼近非线性函数 sin(x)。这里用到的 tanh 非线性函数虽然形式简单,但其非线性曲线足以让模型学习到较复杂的变化模式。
二、简单的激活函数,为何可以模拟现实世界的非线性特征?
理解这个,是理解神经网络的关键,所以这一块,大家需要返回去看看神经网络的概念,和进一步加深对“通用逼近定理”的理解。
简单的激活函数虽然数学形式比较简单,但其关键在于“组合效应”:通过多层神经网络中不断堆叠这些简单函数,可以逼近非常复杂的非线性映射。这背后有几个核心原因:
-
非线性叠加的威力(通用逼近定理)
根据通用逼近定理,只要隐藏层足够大、层数足够多,哪怕每个隐藏单元仅使用简单的非线性函数(例如 tanh\tanhtanh 或 sigmoid),整个网络也能逼近任何连续的非线性函数。换句话说,各层简单激活函数叠加后构成复合函数,整体非线性表达能力大大增强,从而能够模拟现实世界中的复杂关系。 -
分层特征抽象
在深层网络中,每一层都对输入数据做简单的非线性变换,然后将数据传递到下一层。底层的简单变换可以捕捉局部特征,而高层则通过组合这些低层特征来表示更为抽象和复杂的信息。这种分层抽象方式使得单个简单激活函数所能表达的信息变得“指数级”丰富。 -
计算效率与优化稳定性
简单函数(如 tanh、sigmoid、ReLU)计算速度快,求导形式简单,从而使得网络的反向传播更易于计算和调优。更复杂的激活函数虽然可能在理论上表达更丰富的非线性关系,但往往会带来计算开销增加、梯度计算变得复杂甚至数值不稳定的问题。实践中,人们发现简单激活函数已经能达到理想的表现与泛化能力,因此广泛采用这种“简单而有效”的方法。 -
经验验证与泛化能力
多年来的研究和实践证明,简单激活函数的组合已经能够有效地捕捉和表达各种现实世界的非线性特征。实际应用中,通过大量数据训练出来的参数(权重和偏置)能自适应地调整,充分利用这些简单激活函数的特性,构造出非常复杂和灵活的映射,而不必引入额外的非线性复杂度。
总的来说,虽然看起来简单,但激活函数通过层层组合和参数的自适应学习,能够模拟现实世界中极为复杂的非线性关系。而使用更复杂的激活函数可能会增加训练难度和计算代价,且实验上并未必能带来明显优势,因此简单且高效的激活函数在实际应用中被广泛采用。
三、自然语言中的语义关联的例子
让我们结合一个例子,加深理解关于简单的激活函数对于神经网络的意义。
在自然语言处理任务中,我们经常需要捕捉词语之间复杂的语义关联,即使这些关联在数学上看起来非常非线性。虽然许多激活函数(例如 tanh、sigmoid 或 ReLU)形式简单,但它们在深层网络中通过层层叠加,可以实现非常丰富的非线性映射,进而捕捉到词语之间微妙的语义关系。下面通过一个具体例子说明这一点:
举例:词语语义关系的建模
假设我们要构造一个简单的神经网络,目的是从词向量中学习语义上的差异和关联。比如,一个经典的语义关系是:
-
“King” - “Man” + “Woman” ≈ “Queen”
在实际应用中,我们不会直接对原始词向量做加减运算,而是通过多层网络对输入的词向量进行非线性转换,最终得到能够捕捉这种语义平移关系的隐藏表示。
1. 输入与嵌入
首先,每个单词会通过词嵌入(Embedding)层转换成一个向量。例如:
-
“King” 被映射为向量 v_king
-
“Man” 被映射为向量 v_man
-
“Woman” 被映射为向量 v_woman
2. 多层全连接网络与简单激活函数
接下来,我们将这些嵌入向量送入一个由多层全连接神经网络组成的模型。每一层的计算过程如下:
h=tanh(Wx+b)
虽然这里使用的 tanh 激活函数在数学上并不复杂,但它的非线性性质(例如,当 x 较小时近似线性,当 x 较大时趋于饱和)使得网络可以对输入进行非线性变换。
通过多层(深度)结构,每一层都在对前一层的输出进行非线性转换。设想经过多层之后,网络学习到了一种映射 F:
F(vking)−F(vman)+F(vwoman)≈F(vqueen)
大概的过程理解如下:
-
初始嵌入与输入层
每个词(如 "King", "Man", "Woman", "Queen")首先通过词嵌入层(Embedding)转换为高维向量。这个初始向量捕捉了词汇的基本语义信息,但通常这些向量尚未明确表达诸如性别、地位等更深层次的语义细节。 -
低级特征抽象(第一、二层)
-
第一层:网络对输入向量进行线性变换(乘以权重矩阵)后,再通过简单非线性激活函数(如 tanh 或 ReLU)激活。这一层简单地组合和“扭曲”输入信息,可能捕捉到诸如“实体特征”(例如区分人与动物、具有人类属性的对象)的低级特征。
-
第二层:这一层收到第一层输出的“预加工”向量,再次经过线性变换和激活函数的组合。经过这样的处理后,模型开始在向量空间中提取一些抽象的属性,比如“性别”特征或“权力”(如“王权”)的初步表示。
-
-
高级语义关系建模(中间和高层)
-
中间层:随着网络层数的增加,信息经过多次线性变换与非线性函数的组合后,低层捕捉到的特征会被重新组合。举例来说,网络可能自动学习到“King”和“Man”之间的差异主要反映了一种“王权”或者“贵族”特征,而这种特征在“Queen”和“Woman”之间也可以找到相似的差异。
-
高层:此时,网络内部的表示已经变得高度抽象。我们可以认为,通过多层堆叠,网络将原始嵌入空间的简单线性表示转换成了一个经过复杂非线性“扭曲”的空间。在这个空间中,简单的线性操作(如向量减法和加法)就能反映出复杂的语义关系。例如,经过网络转换后的向量 F(King), F(Man) 和 F(Woman) 满足
F(King)−F(Man)+F(Woman)≈F(Queen),这表示模型在学习过程中已经捕捉到“性别”、“身份”等更高层次的语义特征,并用一种简单、线性的方式在输出层呈现了这种复杂关系。
-
这个公式说明,尽管每层使用的激活函数(如 tanh\tanhtanh)本身简单,但经过堆叠后,模型捕捉到的F(⋅) 映射具有足够的非线性能力,从而“理解”并近似模拟了这种复杂的语义关联。
3. 为什么不用复杂的激活函数?
-
计算效率与稳定性:简单激活函数计算速度快、易于求导,保证了反向传播过程中的梯度计算和参数更新非常高效且稳定。复杂的非线性函数可能会引入额外的计算负担和不确定性,甚至导致数值不稳定。
-
组合效应:神经网络的强大之处在于多层结构中简单非线性函数的组合。正如通用逼近定理所说,只要隐藏层足够大、层数足够多,简单激活函数构成的网络就能逼近任意连续的非线性函数。
-
经验验证:大量实践证明,简单激活函数(如 tanh 和 ReLU)已经足够捕捉和表示自然语言中的复杂语义特征,而进一步增加激活函数的复杂性往往不会带来明显的性能提升,反而可能增加训练难度。
总结
简单激活函数(如 tanh)虽然形式上简单,但当它们通过多层网络组合后,就能形成极其复杂的非线性映射,足以捕捉自然语言中诸如“King - Man + Woman = Queen”这种深层语义关联。简单激活函数的优势在于计算高效、易求导和稳定性好,这些特点使得它们在实际任务中能够良好地表达现实世界的非线性特征,而无需采用过于复杂的非线性函数。
相关文章:
神经网络 - 关于简单的激活函数的思考总结
最近一直在学习神经网络,有一些收获,也有一些迷惑,所以驻足思考:为什么简单的激活函数如sigmoid函数、ReLU函数,当应用在神经网络的模型中,却可以实现对现实世界复杂的非线性关系的模拟呢?本文我…...
pig 权限管理开源项目学习
pig 源码 https://github.com/pig-mesh/pig 文档在其中,前端在文档中,官方视频教学也在文档中有。 第一次搭建,建议直接去看单体视频,照着做即可。 文章目录 项目结构Maven 多模块项目pig-boot 启动核心模块pig-auth 实现认证和…...
excel中的VBA指令示例(二)
。。。接上篇。 Range("D1").Select ’选择D1单元格 ActiveCell.FormulaR1C1 "装配数量" ‘单元格内容为装配数量 Range("D1").Select Selection.AutoFilter …...
基于vue3与supabase系统认证机制
1. 认证框架概述 系统采用 Supabase 作为认证和数据服务提供商,实现了完整的用户身份验证流程。系统使用基于 JWT (JSON Web Token) 的认证方式,提供了安全可靠的用户身份管理机制。 1.1 技术栈 前端: Vue 3 TypeScript状态管理: Pinia认证服务: Sup…...
【算法笔记】并查集详解
🚀 并查集(Union-Find)详解:原理、实现与优化 并查集(Union-Find)是一种非常高效的数据结构,用于处理动态连通性问题,即判断若干个元素是否属于同一个集合,并支持集合合…...
基于Redis实现短信防轰炸的Java解决方案
基于Redis实现短信防轰炸的Java解决方案 前言 在当今互联网应用中,短信验证码已成为身份验证的重要手段。然而,这也带来了"短信轰炸"的安全风险 - 恶意用户利用程序自动化发送大量短信请求,导致用户被骚扰和企业短信成本激增。本…...
编程中,!! 双感叹号的理解
在编程中,!! 双感叹号的含义取决于上下文。通常情况下,!! 是逻辑非操作符的双重使用,用来将一个值强制转换为布尔类型。 1. 逻辑非操作符 在 JavaScript 中,! 是逻辑非操作符,它会将一个值转换为布尔类型:…...
ARM内核与寄存器
ARM内核与寄存器详解 目录 ARM架构概述ARM处理器模式 Cortex-M3内核的处理器模式Cortex-A系列处理器模式 ARM寄存器集 通用寄存器程序计数器(PC)链接寄存器(LR)堆栈指针(SP)状态寄存器(CPSR/SPSR) 协处理器寄存器NEON和VFP寄存器寄存器使用规范常见ARM指令与寄存器操作 ARM架…...
【C++进阶】关联容器:set类型
目录 一、set 基本概念 1.1 定义与特点 1.2 头文件与声明 1.3 核心特性解析 二、set 底层实现 2.1 红黑树简介 2.2 红黑树在 set 中的应用 三、set 常用操作 3.1 插入元素 3.2 删除元素 3.3 查找元素 3.4 遍历元素 3.5 性能特征 四、set 高级应用 4.1 自定义比较…...
Linux内核——X86分页机制
X86分页机制 x86的分页单元支持两种分页模式:常规分页与扩展分页。 常规分页采用两级结构,固定页大小为4KB。线性地址被划分为三个字段: 页目录索引(最高10位)页表索引(中间10位)页内偏移&am…...
重温Java - Java基础二
工作中常见的6中OOM 问题 堆内存OOM 堆内存OOM 是最常见的OOM了。出现堆内存OOM 问题的异常信息如下 java.lang.OutOfMemoryError: Java heap space此OOM是由于Java中的heap的最大值,已经不能满足需求了。 举个例子 Test public void test01(){List<OOMTest…...
回溯算法+对称剪枝——从八皇后问题到数独问题(二)
引入: 本节我们进一步完善八皇后问题,学习剪枝、八皇后残局问题 进一步领会逻辑编程的概念,深入体会回溯算法,回顾上一节提到的启发搜索策略。 回顾: 八皇后问题:我们需要在一个空棋盘上放置 n 个皇后&a…...
基于 Spring Boot 瑞吉外卖系统开发(三)
基于 Spring Boot 瑞吉外卖系统开发(三) 分类列表 静态页面 实现功能所需要的接口 定义Mapper接口 Mapper public interface CategoryMapper extends BaseMapper<Category> {}定义Service接口 public interface CategoryService extends ISe…...
Pascal VOC 2012 数据集格式与文件结构
Pascal VOC 2012 1 Pascal VOC 2012 数据集1.1 数据集概述1.2 文件结构1.3 关键文件和内容格式(1) Annotations/ 目录(2) ImageSets/ 目录(3) JPEGImages/ 目录(4) SegmentationClass/ 和 SegmentationObject/ 目录 1.4 标注格式说明(1) 目标检测标注(2) 语义分割标注(3)实例分…...
11:00开始面试,11:08就出来了,问的问题有点变态。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...
MySQL与Oracle字段类型对比及迁移指南
文章目录 MySQL与Oracle字段类型对比及迁移指南1. 核心字段类型对照表2. 常见函数对照表2.1 字符串函数2.2 日期函数2.3 数值函数2.4 类型转换函数2.5 空值处理函数2.6 其他常用函数3. 迁移配置细则4. 迁移工具推荐5. 常见问题解决方案6. 性能优化建议MySQL与Oracle字段类型对比…...
Spring MVC 处理 HTTP 状态码、响应头和异常的完整示例
Spring MVC 处理 HTTP 状态码、响应头和异常的完整示例 1. 正常响应处理 通过 ResponseEntity 可以灵活控制 HTTP 状态码、响应头和响应体。 代码示例:创建资源返回 201 并设置 Location 头 import org.springframework.http.HttpHeaders; import org.springfram…...
http页面的加载过程
HTTP/2 核心概念 1.1 流(Stream) • 定义:HTTP/2 连接中的逻辑通道,用于传输数据,每个流有唯一标识符(Stream ID)。 • 特点: ◦ 支持多路复用(多个流并行传输&#…...
动手人形机器人(RL)
1 PPO的讲解 核心步骤,如策略网络和价值网络的定义、优势估计、策略更新、价值更新等基础功能的实现 2 代码构成 可能涉及 初始化,Behavior Clone 3 动手强化学习 import pytorch as torch class actorcritic ##等待补充 4 PD Gains 在机器人学中&…...
使用RabbitMQ实现异步秒杀
搭建RabbitMQ 在虚拟机上用docker搭建RabbitMQ,首先拉取镜像 docker run --privilegedtrue -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management mkdir -p /usr/local/docker/rabbitmq再创建rabbitmq容器,下面的命令已经能够创建之后…...
基于PyQt5的企业级生日提醒系统设计与实现
在企业人力资源管理场景中,员工生日提醒是一项重要的关怀功能。本文将以一个基于PyQt5开发的生日提醒系统为例,深入解析桌面应用程序开发中的关键技术实现,涵盖GUI设计、数据持久化、系统集成、动画效果等核心模块。 一、技术选型分析 1.1 PyQt5框架优势 跨平台特性:支持W…...
蓝桥杯嵌入式第16届——ADC模数转化部分
将外部的模拟信号转换为数字信号 ( ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 ) STM32 - ADC 笔记_stm32 adc电容-CSDN博客 引脚状况 STM32cubemx配置 ADC1配置 ADC2配置 代码部分 …...
拜特科技签约天津城投集团,携手共建司库管理系统
近日,拜特科技成功签约天津城市基础设施建设投资集团有限公司(以下简称“天津城投集团”),携手共建司库管理系统。 自2015年结缘以来,拜特科技与天津城投集团已携手并进十年,构建了稳固且高效的合作桥梁。…...
Spring Boot 中集成 Knife4j:解决文件上传不显示文件域的问题
Spring Boot 中集成 Knife4j:解决文件上传不显示文件域的问题 在使用 Knife4j 为 Spring Boot 项目生成 API 文档时,开发者可能会遇到文件上传功能不显示文件域的问题。本文将详细介绍如何解决这一问题,并提供完整的解决方案。 Knife4j官网…...
Nuxt.js的useHead有哪些对象
在Nuxt.js框架中,useHead是一个用于操作页面<head>部分的辅助函数。它返回一个包含多个对象的集合,允许你轻松地在组件中修改或添加 HTML 的<head>内容。 具体来说,useHead 返回的对象集合包括: title: 用于设置页面…...
JavaScript的可选链操作符 ?.
JavaScript的可选链操作符(Optional Chaining Operator)是 ES2020(ES11) 引入的新特性,通过语法 ?. 简化对深层嵌套对象属性、方法或数组元素的访问,避免因中间值为 null 或 undefined 而引发的错误。 核…...
增长黑客:激活实验助力增长
激活实验是推动用户增长的重要手段。下面为大家详细介绍激活实验的关键步骤与重点解决问题 激活实验的三个关键步骤 1. 明晰 “啊哈时刻” 路径 “啊哈时刻” 指用户瞬间领悟产品价值的瞬间。要达成这一点,需明确用户体验到 “啊哈时刻” 的所有路径。以在线绘图工具…...
STM32低功耗
设置不同位来配置是哪种低功耗模式 WAKEUP引脚可以唤醒任何睡眠状态,但是只有待机模式是属于WAKEUP唤醒,其他模式都是属于中断唤醒,所以待机模式要使能EWUP引脚,还要手动清除唤醒标志位(在进入待机模式前就要清除标志位ÿ…...
【精品PPT】2025固态电池知识体系及最佳实践PPT合集(36份).zip
精品推荐,2025固态电池知识体系及最佳实践PPT合集,共36份。供大家学习参考。 1、中科院化学所郭玉国研究员:固态金属锂电池及其关键材料.pdf 2、中科院物理所-李泓固态电池.pdf 3、全固态电池技术研究进展.pdf 4、全固态电池生产工艺.pdf 5、…...
头歌数据库【数据库概论】第10-11章 故障恢复与并发控制
第1关:数据库恢复技术 1、事务的( A)特性要求事务必须被视为一个不可分割的最小工作单元 A、原子性 B、一致性 C、隔离性 D、持久性 2、事务的(C )特性要求一个事务在执行时,不会受到其他事务的影响。 A、原…...
qt之opengl使用
使用qt中的openglWidget绘制一个三角形。自定义的类继承关系sunOpengl : public QOpenGLWidget,QOpenGLFunctions_3_3_Core 代码如下 /*----MainWindow.cpp----------------------------------------------*/ #include "mainwindow.h" #include "./ui_mainwin…...
Spark Core编程
一 Spark 运行架构 1 运行架构 定义 Spark 框架的核心是一个计算引擎,整体来说,它采用了标准 master-slave 的结构 如图所示 2 核心组件 Spark 框架有两个核心组件: 1)Driver 2)Spark 驱动器节点(用于执行 Spark 任务中的 main 方法&…...
蓝桥杯 B3619 10 进制转 x 进制
题目描述 给定一个十进制整数 n 和一个小整数 x。将整数 n 转为 x 进制。对于超过十进制的数码,用 A,B ... 表示。 输入格式 第一行一个整数 n; 第二行一个整数 x。 输出格式 输出仅包含一个整数,表示答案。 输入输出样例 …...
spring mvc中不同服务调用类型(声明式(Feign)、基于模板(RestTemplate)、基于 SDK、消息队列、gRPC)对比详解
RestControllerAdvice 和 ControllerAdvice 对比详解 1. 基本概念 注解等效组合核心作用ControllerAdviceComponent RequestMapping(隐式)定义全局控制器增强类,处理跨控制器的异常、数据绑定或全局响应逻辑。RestControllerAdviceControll…...
敏捷迭代实战经验分享
一、敏捷迭代团队成员构成 比较高效的敏捷开发团队人员一般保持在7~10人左右,一般一个完整的敏捷迭代团队包含PM、BA、开发、测试、设计5类角色成员,由于不同项目的现状不同,可根据现实情况配置相应角色。 图:项目核心团队角色 二、敏捷实践活动 敏捷迭代的周期可以根据各…...
《从底层逻辑剖析:分布式软总线与传统计算机硬件总线的深度对话》
在科技飞速发展的当下,我们正见证着计算机技术领域的深刻变革。计算机总线作为信息传输的关键枢纽,其发展历程承载着技术演进的脉络。从传统计算机硬件总线到如今备受瞩目的分布式软总线,每一次的变革都为计算机系统性能与应用拓展带来了质的…...
服务器运维ACL访问控制列表如何配置
ACL(访问控制列表)在服务器运维中用于细粒度地控制用户或主机对资源的访问权限。正确配置ACL能有效限制未授权访问,增强系统安全性。以下是ACL的基本配置流程及示例,主要以Linux系统为例进行说明。 一、启用ACL支持 1. 检查文件系统是否支持ACL tune2fs …...
PIXOR:基于LiDAR的3D检测模型解析
目录 1、前言 2、PIXOR介绍 2.1. 什么是PIXOR? 2.2. PIXOR如何工作? 3、表现和应用 3.1、PIXOR的性能表现 3.2、PIXOR的应用场景 3.3、PIXOR的局限性与挑战 4. PIXOR的未来展望 5. 结语 1、前言 自动驾驶技术正以前所未有的速度发展ÿ…...
【OSG学习笔记】Day 2: 场景图(Scene Graph)的核心概念
今天课程分为两部分,第一部分我们学习一下Scene Graph理论知识,第二部分我们熟悉下OSG的源码。 第一部分(Scene Graph) 在OpenSceneGraph中,场景图(Scene Graph)通过树状层级结构高效管理3D对…...
虚幻5的C++调试踩坑
本地调试VS附加调试 踩坑1 预编译版本的UE5没有符号文件,无法调试源码 官方代码调试所需要的符号文件bdp需要下载导入。我安装的5.5.4是预编译版本,并非ue5源码。所以不含bdp文件。需要调试官方代码则需要通过EPIC中下载安装。右键UE版本,打…...
【软件测试】自动化测试框架Pytest + Selenium的使用
Pytest Selenium 是一种常见的自动化测试框架组合,用于编写和执行 Web 应用程序的自动化测试。Pytest 是一个强大的 Python 测试框架,而 Selenium 是一个用于浏览器自动化的工具,二者结合使用可以高效地进行 Web 应用的功能测试、UI 测试等。…...
蓝桥杯补题
方法技巧: 1.进行循环暴力骗分,然后每一层的初始进行判断,如果已经不满足题意了,那么久直接continue,后面的循环就不用浪费时间了。我们可以把题目所给的等式,比如说有四个未知量,那么我们可以用…...
2025年港口危货储存单位主要安全管理人员备考练习题
港口危货储存单位主要安全管理人员备考练习题: 单选题 1、依据《安全生产法》,危险物品的生产、储存单位的安全生产管理人员的任免,应当告知( )。 A. 主管的负有安全生产监督管理职责的部门 B. 当地人民政府 C. 行…...
openEuler欧拉系统配置local的yum源
1.下载iso openEuler | 开源社区 | openEuler社区官网 2.上传openEuler镜像文件至服务器(例如上传至/home目录) 3.创建挂载目录 #mkdir -p /mount/iso 4.镜像挂载 #mount -o loop /home/openEuler-22.03-LTS-x86_64-dvd.iso(镜像上传目…...
AI比人脑更强,因为被植入思维模型【52】福格行为模型
giszz的理解:重要公式,是BMAT,行为动机能力触发点。也许是乘以。这个挺深刻的,在产品设计中,界面交互,都可以用到这样的思维模型。 一、定义 福格行为模型(Fogg Behavior Model)是由…...
DocLayout-YOLO:通过多样化合成数据与全局-局部感知实现文档布局分析突破
论文地址:https://arxiv.org/pdf/2410.12628 目录 一、论文概览:当YOLO遇见文档分析 二、创新点解析:两大核心技术 创新点1:Mesh-candidate BestFit合成算法 创新点2:全局-局部可控感知模块(GL-CRM) 三、实验结果:全面超越SOTA 主要指标对比(D4LA数据集) 消融…...
栈(算法)
在 C 里,栈是一种遵循后进先出(LIFO)原则的数据结构。下面从多个方面为你介绍 C 栈: 1. 使用标准库中的std::stack C 标准库提供了std::stack容器适配器,能方便地实现栈的功能。以下是简单示例: cpp #in…...
leetcode每日一题:子数组异或查询
引言 今天的每日一题原题是3375. 使数组的值全部为 K 的最少操作次数,比较水,可以分成2种情况: 存在比k更小的数,由于每次操作只能使得部分数变小,但是不能把任何数变大,所以肯定无法达成 不存在比k更小的…...
openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1
openEuler-22.03-LTS-SP3-x86_64 离线编译安装 nginx 1.20.1 一、概述二、安装依赖1、安装 pcre、pcre-devel2、安装 zlib、zlib-devel3、安装 make、gcc、gcc-c3、编译 openssl5、安装 libtool6、编译 pcre-8.45 三、下载编译 nginx四、运行 nginx 一、概述 本文档适用于无法…...
使用Alamofire下载网站首页内容
用Alamofire库写一个下载网站首页内容的Swift代码。首先,我需要确认用户的需求。他们可能是在开发一个iOS应用,需要从某个网站获取首页的数据,比如HTML内容或者API数据。Alamofire是一个常用的Swift网络库,基于URLSession…...