Transformer入门教程全解析(一)
一、开篇:走进Transformer的奇妙世界
在当今深度学习领域,Transformer 无疑是一颗璀璨的明星,它如同一股强大的变革力量,席卷了自然语言处理(NLP)乃至更多领域。从机器翻译到文本生成,从问答系统到情感分析,Transformer 都展现出了卓越的性能,打破了传统模型的诸多局限。对于渴望深入探索深度学习奥秘的开发者和研究者来说,掌握 Transformer 已然成为一项必备技能。本教程将从基础概念讲起,逐步深入其架构细节、训练方法以及实际应用,带领大家开启一段精彩的 Transformer 学习之旅。
二、Transformer 诞生的背景与意义
传统模型的困境
- 在 Transformer 出现之前,像循环神经网络(RNN)及其变体(如长短期记忆网络 LSTM、门控循环单元 GRU)在 NLP 任务中占据主导地位。然而,它们存在着明显的缺陷。RNN 系列模型在处理长序列数据时面临梯度消失或梯度爆炸问题,导致难以有效捕捉长距离依赖关系。例如在翻译一段篇幅较长、语法结构复杂的文本时,RNN 往往会因为遗忘前文信息而出现翻译不准确的情况。
Transformer 的突破
- Transformer 创新性地摒弃了传统的循环结构,采用多头注意力机制(Multi-Head Attention)来捕捉输入序列的全局信息,从而能够轻松处理长距离依赖。这使得模型在面对复杂文本时,无论是语义理解还是生成响应,都表现得更加出色。以谷歌的机器翻译系统为例,引入 Transformer 后,翻译的准确性和流畅性得到了质的飞跃,极大地提升了用户体验。
三、Transformer 的核心架构剖析
整体架构概览
- Transformer 主要由编码器(Encoder)和解码器(Decoder)两大部分组成,它们如同两个紧密协作的引擎,驱动着整个模型的运行。编码器负责对输入序列进行特征提取和编码,将其转换为一种包含丰富语义信息的中间表示;解码器则依据编码器的输出以及已生成的部分序列,逐步生成目标序列。在文本翻译任务中,编码器接收源语言文本,解码器生成目标语言文本,两者通过注意力机制实现信息的高效传递与交互。
编码器详解
- 编码器通常由多个相同的编码层堆叠而成,每个编码层又包含多头注意力层(Multi-Head Attention Layer)和前馈神经网络层(Feed-Forward Network Layer)。
- 多头注意力层:它是 Transformer 的关键创新之一。通过并行使用多个注意力头,每个头关注输入序列的不同子空间,然后将各个头的结果拼接并投影,能够全方位地捕捉序列中的复杂关系。例如,在分析一篇新闻报道时,一个注意力头可能聚焦于事件主体,另一个头关注时间信息,第三个头留意地点要素等,综合起来就能完整地理解文本含义。
- 前馈神经网络层:在多头注意力层之后,采用简单的全连接前馈神经网络对特征进行进一步变换。它由两个线性变换层和一个激活函数(如 ReLU)组成,能够增强模型的表达能力,学习到更高级的特征表示。
解码器详解
- 解码器同样由多个解码层构成,结构与编码器类似,但多了一个交叉注意力层(Cross-Attention Layer)。
- 交叉注意力层:它的作用是让解码器在生成当前位置的输出时,不仅关注已生成的部分序列(通过掩码多头注意力实现),还能关注编码器输出的完整源序列信息,从而准确地生成符合语义逻辑的目标序列。比如在翻译句子“我喜欢吃苹果”时,当解码器生成“我”对应的目标语言单词后,通过交叉注意力从编码器获取源句子剩余部分的信息,来决定下一个单词应该是“喜欢”的对应翻译,依此类推。
- 掩码多头注意力:在解码器内部,为了防止信息泄露,即当前位置不能看到后续位置的信息,采用掩码操作。例如在生成文本时,模型不能提前知道下一个单词是什么,掩码多头注意力确保了生成过程的顺序合理性。
四、注意力机制:Transformer 的灵魂所在
自注意力机制(Self-Attention)原理
- 自注意力机制是多头注意力的基础,它计算输入序列中每个位置与其他所有位置的关联程度。对于序列中的每个单词,通过将其与其他单词进行相似度打分(常用点积操作),得到一个注意力分布,然后根据这个分布对所有单词的特征进行加权求和,使得每个单词都能融合序列中的全局信息。以句子“小猫追着小狗跑”为例,“追着”这个词通过自注意力机制,会给予“小猫”和“小狗”较高的注意力权重,因为它们与“追着”的语义关联紧密,从而在编码时能更好地体现其语义角色。
多头注意力的优势与实现细节
- 优势:如前文所述,多头注意力通过并行的多个头关注不同子空间,增加了模型的灵活性和表达能力。不同头可以学习到不同层次的语义特征,如同多个专家从不同角度分析文本,最后融合的结果更加全面准确。
- 实现细节:每个头的计算过程基本与自注意力相同,只是参数矩阵不同。在实现时,通常先对输入分别经过线性变换投影到不同子空间,然后并行计算注意力,最后将各头结果拼接并再次线性变换得到最终输出,确保维度与输入一致。
五、位置编码:赋予序列位置信息
位置编码的必要性
- 由于 Transformer 没有像 RNN 那样的循环结构,无法天然地捕捉序列的顺序信息。因此,需要引入位置编码来告知模型输入单词的位置。例如在处理诗句“床前明月光,疑是地上霜”时,如果没有位置编码,模型无法区分“床前”和“地上”的先后顺序,可能会导致语义理解混乱。
常见的位置编码方法
- 正弦余弦位置编码:这是 Transformer 原文中采用的方法,它利用正弦和余弦函数的周期性,为不同位置的单词生成独特的编码向量。具体来说,对于序列中的每个位置 和维度 ,编码向量的元素按照公式计算,如 , ,其中 是模型维度。这种编码方式能够让模型在不引入额外参数的情况下,有效地学习到位置信息,并且在长序列中也表现出良好的扩展性。
- 可学习的位置编码:除了正弦余弦编码,还有一些研究提出使用可学习的位置嵌入,即将位置编码作为模型的可训练参数。在训练过程中,模型根据数据自动调整位置编码,以适应不同任务的需求。不过,这种方法可能会增加模型的参数数量,在某些情况下容易出现过拟合。
六、Transformer 的训练过程详解
数据预处理
- 文本清洗:去除文本中的噪声信息,如特殊符号、多余空格、HTML 标签等。例如在爬取网页新闻作为训练数据时,要剔除掉网页中的广告代码、注释等无关内容,使文本纯净,便于后续处理。
- 分词:将文本按照一定规则分割成单词或子词(Subword)。在英文中,常用的分词工具如 NLTK、spaCy 等,可以将句子拆分为单词;而对于中文,由于词与词之间没有天然分隔,通常采用基于规则或统计的分词方法,如jieba分词,将句子划分为一个个有意义的词汇单元。
- 构建词汇表:根据分词结果,统计所有出现的单词或子词,选取高频部分构建词汇表。词汇表的大小会影响模型的复杂度和性能,太大可能导致过拟合,太小则无法覆盖足够的语义信息。一般会根据任务需求和数据规模,选择合适的词汇表大小,如 30000 - 50000 个词汇。
- 向量化:将文本中的单词或子词根据词汇表转换为对应的向量表示。常用的方法有独热编码(One-Hot Encoding)和词嵌入(Word Embedding),独热编码简单直接,但维度太高且稀疏,词嵌入如 Word2Vec、GloVe 等能够学习到单词的语义相似性,生成低维稠密向量,更适合实际应用。在 Transformer 中,通常采用预训练的词嵌入并在训练过程中微调,以加快收敛速度并提升性能。
损失函数的选择
- 在不同的任务中,会根据任务目标选择合适的损失函数。例如在机器翻译任务中,常用的是交叉熵损失函数,它衡量模型生成的翻译结果与真实翻译之间的差异,通过最小化这个差异来训练模型,使得模型生成的译文越来越接近标准译文。在文本分类任务中,则可能采用二元交叉熵或多分类交叉熵损失,根据文本所属类别与预测类别的偏差来调整模型参数。
优化算法与超参数调整
- 优化算法:常见的有随机梯度下降(SGD)及其变种,如带动量的 SGD、Adagrad、Adadelta、Adam 等。Adam 优化算法因其自适应调整学习率以及在大多数情况下的良好收敛性能,在 Transformer 训练中被广泛使用。它根据梯度的一阶矩估计和二阶矩估计来动态更新模型参数,使得训练过程更加稳定高效。
- 超参数调整:涉及多个方面,如学习率、批处理大小(Batch Size)、模型层数、头的数量、隐藏层维度等。学习率过大可能导致模型无法收敛,过小则训练速度太慢,通常采用学习率衰减策略,随着训练的进行逐步降低学习率。批处理大小影响内存占用和训练效率,需要在硬件条件允许的情况下合理选择。模型层数和头的数量、隐藏层维度等则与模型的复杂度和表达能力相关,需要通过实验对比不同组合,在模型性能和计算资源之间找到平衡。例如在一个小规模的文本生成任务中,经过测试发现 4 层编码器、4 层解码器,每个头 8 个注意力头,隐藏层维度 512 的配置既能满足性能要求,又不会占用过多资源。
七、Transformer 在自然语言处理中的应用实例
机器翻译
- 工作原理:基于 Transformer 的机器翻译系统,编码器接收源语言文本,将其编码为语义表示,解码器根据这个表示和已生成的部分译文,逐步生成目标语言文本。例如将英文句子“Hello, how are you?”翻译为中文“你好,你怎么样?”时,编码器捕捉到英文句子中的问候、询问等语义信息,解码器利用这些信息结合中文语法习惯生成通顺的译文。
- 优势体现:相较于传统基于短语的机器翻译模型,Transformer 能够更好地处理长难句,捕捉句子中的长距离依赖,使得翻译更加准确、流畅。在国际会议实时翻译场景中,使用 Transformer 模型的翻译系统能够快速准确地将演讲者的内容转换为多种目标语言,极大地促进了跨语言交流。
文本生成
- 实现方式:在文本生成任务中,给定一个起始提示,如故事的开头、问题的主题等,解码器利用编码器对提示信息的编码(若有编码器),按照一定的生成策略(如贪心算法、束搜索等)逐步生成后续文本。以写小说为例,给定“在一个神秘的森林里”作为开头,解码器根据模型学习到的语言知识和语义逻辑,不断生成新的句子,如“有一个勇敢的探险家正在探索这片未知的领域,他手持宝剑,小心翼翼地前行”,从而构建出完整的文本。
- 应用场景:广泛应用于新闻写作、故事创作、对话生成等领域。一些新闻机构利用基于 Transformer 的文本生成模型,根据实时数据快速生成体育赛事报道、财经新闻摘要等,提高新闻产出效率;在聊天机器人开发中,文本生成能力让机器人能够给出自然流畅的回复,提升用户交互体验。
问答系统
- 系统构建:由问题理解模块(通常基于 Transformer 编码器对问题进行编码)、知识库检索模块(利用编码后的问题在知识库中查找相关信息)和答案生成模块(类似文本生成,由解码器生成最终答案)组成。例如在回答“苹果公司什么时候成立的?”这个问题时,问题理解模块提取关键信息“苹果公司”“成立时间”,知识库检索模块在公司信息库中找到苹果公司成立于 1976 年的相关资料,答案生成模块将这个信息组织成通顺的回答“苹果公司成立于 1976 年”。
- 实际效果:能够快速准确地回答用户的各种问题,无论是常识性问题、专业知识问题还是基于特定领域的查询。在智能客服领域,帮助企业快速响应客户咨询,解决问题,降低人力成本,提高客户满意度。
八、Transformer 的扩展与变体研究
基于 Transformer 的预训练模型
- BERT(Bidirectional Encoder Representations from Transformers):它采用双向 Transformer 编码器,对文本进行深度双向预训练。在大规模文本上学习到通用的语言表征,然后通过微调应用于各种下游任务,如文本分类、情感分析等。例如在情感分析任务中,将影评文本输入 BERT 模型,它能快速判断出影评是正面、负面还是中性情感,准确率较传统模型有大幅提升。
- GPT(Generative Pretrained Transformer):侧重于生成能力,由多层 Transformer 解码器组成,通过无监督的语言模型目标进行预训练,能够生成连贯自然的文本。像 OpenAI 的 GPT-3,拥有海量参数,在文本续写、创意写作等方面表现惊人,能够根据给定的开头续写小说、诗歌等,展现出强大的语言生成潜力。
Transformer 架构的改进方向
- 高效注意力机制:为了解决原始多头注意力机制的计算复杂度问题,一些研究提出了如线性注意力机制(Linear Attention)、基于位置的注意力机制(Position-Based Attention)等改进方案。线性注意力通过降低计算复杂度,使得模型在处理长序列时更加高效,能够在资源有限的情况下运行大规模模型。
- 模型压缩与轻量化:随着模型越来越大,对硬件资源的要求也越来越高。因此,有研究致力于模型压缩,如采用量化技术将模型参数从高精度转换为低精度表示,减少存储需求;通过剪枝技术去除模型中不重要的连接或参数,在不损失太多性能的情况下降低模型复杂度,使得 Transformer 能够在移动端等资源受限设备上运行。
相关文章:
Transformer入门教程全解析(一)
一、开篇:走进Transformer的奇妙世界 在当今深度学习领域,Transformer 无疑是一颗璀璨的明星,它如同一股强大的变革力量,席卷了自然语言处理(NLP)乃至更多领域。从机器翻译到文本生成,从问答系…...
拼音读音基础
文章目录 一、音节1、结构2、声母3、韵母 二、声调 拼音读音往往被认为跟应试考试相关,学会正常交流口语以后不再进行关注,其实还是有必要了解细节、查漏补缺。 一、音节 1、结构 音节 声母 韵母;一个音节基本等于一个汉字; 2、…...
Qt 坐标系统和坐标变换
一、概述:1、QPainter在QPaintDevice上绘图的默认坐标系统是,原点(0,0)在左上角,x轴正方向水平向右,y轴正方向竖直向下的坐标系。 2、为了绘图的方便,QPainter提供了一些坐标变换的功能,通过平移、旋转、缩放等坐标变…...
【redis】ubuntu18安装redis7
在Ubuntu 18下安装Redis7可以通过以下两种方法实现:手动编译安装和使用APT进行安装。 Ubuntu 18系统的环境和版本: $ cat /proc/version Linux version 4.15.0-213-generic (builddlcy02-amd64-079) (gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)…...
Outlook 网页版一直提示:检测到重复的重定向
Outlook 网页版提示“检测到重复的重定向”通常是由于浏览器缓存、Cookie问题或浏览器插件引发的。可以按照以下步骤进行排查和解决: 1. 清除浏览器缓存和 Cookie 在浏览器设置中找到清除浏览数据的选项。勾选“缓存文件”和“Cookies”相关选项,然后清…...
初级前端面试题 - js
前言:众所周知,HTML,CSS,JS是学习前端所必备的。js的基础学好了,框架类的vue,react等都会接受的很快,因此js是前端很总要的一个部分,这篇文章将会结合面试题,对js的知识点进行总结 号外号外,这是…...
matlab的绘图的标题中(title)添加标量以及格式化输出
有时候我们需要在matlab绘制的图像的标题中添加一些变量,这样在修改某些参数后,标题会跟着一块儿变。可以采用如下的方法: x -10:0.1:10; %x轴的范围 mu 0; %均值 sigma 1; %标准差 y normpdf(x,mu,sigma); %使用normpdf函数生成高斯函数…...
51单片机——串口通信(重点)
1、通信 通信的方式可以分为多种,按照数据传送方式可分为串行通信和并行通信; 按照通信的数据同步方式,可分为异步通信和同步通信; 按照数据的传输方向又可分为单工、半双工和全双工通信 1.1 通信速率 衡量通信性能的一个非常…...
mapbox基础,style样式汇总,持续更新
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言二、🍀根属性2.1 so…...
用AI技术提升Flutter开发效率:ScriptEcho的力量
引言 在当今快速发展的技术时代,Flutter作为一种跨平台开发框架,正在越来越多的开发者中崭露头角。它不仅能够为开发者提供一套代码同时部署到iOS和Android平台的解决方案,还能帮助企业节省人力成本和开发时间。然而,对于新手开发…...
Java阶段四04
第4章-第4节 一、知识点 CSRF、token、JWT 二、目标 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验证和JWT验证的区别 学会使用JWT 三、内容分析 重点 理解什么是CSRF攻击以及如何防范 理解什么是token 理解什么是JWT 理解session验…...
vivado 时钟指南
时钟指南 每个 FPGA 架构都为时钟提供有专用资源。掌握 FPGA 架构中的时钟资源,使您能够规划好自己的时钟,从而实现时钟 资源的最佳利用。大多数设计无需您了解这些细节。但如果您能够控制布局,同时对每个时钟域上的扇出有良好的思 路&a…...
git项目提交步骤(简洁版)
1.创建仓库 2.填写 信息 3.点击这个按钮 4.找到要上传的文件,在目录内右键点击 5.依次执行命令 在命令窗口中输入:git init 复制仓库地址: 在命令窗口中输入:git remote add origin 仓库地址 在命令窗口中输入:…...
Jmeter-压测时接口如何按照顺序执行
Jmeter-压测时接口如何按照顺序执行-临界部分控制器 在进行压力测试时,需要按照顺序进行压测,比如按照接口1、接口2、接口3、接口4 进行执行 查询结果是很混乱的,如果请求次数少,可能会按照顺序执行,但是随着次数增加…...
模式识别-Ch5-线性判别函数
Ch5 线性判别函数 文章目录 Ch5 线性判别函数引言:生成模型 vs判别模型生成模型 vs 判别模型判别模型分类 线性判别函数与决策面线性判别函数两类情况下的决策多类问题下决策 多类情形-线性机器线性决策面优缺点 广义线性判别函数例:二次判别函数例1: 1-…...
数据结构二叉树-C语言
数据结构二叉树-C语言 1.树1.1树的概念与结构1.2树的相关术语1.3树的表示1.4树形结构实际运用场景 2.二叉树2.1概念与结构2.2特殊的二叉树2.2.1满二叉树2.2.2完全二叉树 2.3二叉树存储结构2.3.1顺序结构2.3.2链式结构 3.实现顺序结构的二叉树4.实现链式结构二叉树4.1前中后序遍…...
字节小米等后端岗位C++面试题
C 基础 引用和指针之间的区别?堆栈和堆中的内存分配有何区别?存在哪些类型的智能指针?unique_ptr 是如何实现的?我们如何强制在 unique_ptr 中仅存在一个对象所有者?shared_ptr 如何工作?对象之间如何同步…...
IOS HTTPS代理抓包工具使用教程
打开抓包软件 在设备列表中选择要抓包的 设备,然后选择功能区域中的 HTTPS代理抓包。根据弹出的提示按照配置文件和设置手机代理。如果是本机则会自动配置,只需要按照提醒操作即可。 iOS 抓包准备 通过 USB 将 iOS 设备连接到电脑,设备需解…...
renben-openstack-使用操作
管理员操作 (1)上传一个qcow2格式的centos7镜像 (2)管理员------>云主机类型------>创建云主机类型 名称:Centos7 VCPU数量:1 内存: 1024 根磁盘: 10G 其他的默认 点击创建云主机类型即可 界面会显示如下 创建公网络 (1)创建…...
HOW - Form 表单确认校验两种模式(以 Modal 场景为例)
目录 一、背景二、具体1. 模式一:点击确认进行校验提示2. 模式二:确认按钮依赖于表单内容实现说明 一、背景 基于react、antd form分别实现如下两种模式: 1、一个 Modal,点击确认进行校验提示2、一个 Modal,确认按钮…...
MATLAB算法实战应用案例精讲-【数模应用】图像边缘检测(附MATLAB和python代码实现)(二)
目录 前言 算法原理 相关概念 二值图像、灰度图像、彩色图像 邻接性、连通性 图像滤波 频率 滤波器 边缘检测算子:Sobel算子、Scharr算子、Laplacian算子、Canny算子 梯度计算 + 顶帽 + 黑帽 + 拉普拉斯金字塔 相位一致性(Phase Congruency,PC) 几种常见的算法…...
高考日语听力中常考2大类关键词
高考日语听力中,有些关键词的出现频率很高,同学们掌握这些关键词的读音和意思,可以提高听力答题的正确率,如时间类、地点类、天气类关键词……本文档为大家整理了干货,高考日语听力常考关键词,帮助同学们区分和积累常用词汇,记得要持续关注哦! 时间类关键词 1.星期 ∙…...
windows和linux的抓包方式
1.实验准备: 一台windows主机,一台linux主机 wireshark使用: 打开wireshark,这些有波动的就代表可以有流量经过该网卡,选择一张有流量经过的网卡 可以看到很多的流量,然后可以使用过滤器来过滤想要的流量…...
工业 4G 路由器赋能远程医疗,守护生命线
在医疗领域,尤其是偏远地区的医疗救治场景中,工业 4G 路由器正发挥着无可替代的关键作用,宛如一条坚韧的 “生命线”,为守护患者健康持续赋能。 偏远地区医疗资源相对匮乏,常常面临着专业医生短缺、诊疗设备有限等困境…...
《太阳之子》Build16524106官方中文学习版
《太阳之子》官方中文版https://pan.xunlei.com/s/VODabFuJ5gA7rCUACMulT5YGA1?pwdc47e# 集战术狙击、解谜与轻度潜行要素于一身,呈现独一无二的第三人称射击游戏体验。每关你只有一发子弹,但你可以进行在命中时重新瞄准、绕过障碍物、加速击穿护甲等操…...
shell-条件判断
目录 一、条件判断 1.按照文件类型进行判断 2.按照文件权限进行判断 3.两个文件之间进行比较 4.两个整数之间进行比较 5.字符串的判断 6.多重条件判断 二、if条件判断 1.单分支if条件语句 2.双分支if条件语句 (1)判断某文件是否存在 &#x…...
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集
【TI毫米波雷达】DCA1000不使用mmWave Studio的数据采集方法,以及自动化实时数据采集 mmWave Studio提供的功能完全够用了 不用去纠结用DCA1000低延迟、无GUI传数据 速度最快又保证算力无非就是就是Linux板自己写驱动做串口和UDP 做雷达产品应用也不会采用DCA1000的…...
20250110_ PyTorch中的张量操作
文章目录 前言1、torch.cat 函数2、索引、维度扩展和张量的广播3、切片操作3.1、 encoded_first_node3.2、probs 4、长难代码分析4.1、selected4.1.1、multinomial(1)工作原理: 总结 前言 1、torch.cat 函数 torch.cat 函数将两个张量拼接起来,具体地是…...
【ROS2】☆ launch之Python
☆重点 ROS1和ROS2其中一个很大区别之一就是launch的编写方式。在ROS1中采用xml格式编写launch,而ROS2保留了XML 格式launch,还另外引入了Python和YAML 编写方式。选择哪种编写取决于每位开发人员的爱好,但是ROS2官方推荐使用Python方式编写…...
unity rb.velocity和transform.position
rb.velocity和transform.position是用来控制物体位置的两种方式,前者通常用来控制人物的移动,它们的主要区别和适用场景如下 一,rb.velocity(控制刚体的速度) 它可以直接控制物体的速度,而不是物体的位置…...
景芯SOC设计实战
终身辅导、一对一辅导,手把手教您完成SoC全流程设计,从入门到进阶,带您掌握SoC芯片架构、算法、设计、验证、DFT、后端及低功耗全流程!直播视频不定期升级!让您快速超越同龄人! 景芯团队主打文档服务器实战…...
【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)
目录 ./real.exe错误1:ERROR while reading namelist physics./wrf.exe错误1:FATAL CALLED FROM FILE: <stdin> LINE: 2419 Warning: too many input landuse types参考./real.exe 错误1:ERROR while reading namelist physics 执行./real.exe时,报错如下: taski…...
Mysql快速列出来所有列信息
文章目录 需求描述实现思路1、如何查表信息2、如何取字段描述信息3、如何将列信息一行展示4、拼接最终结果 需求描述 如何将MySQL数据库中指定表【tb_order】的所有字段都展示出来,以备注中的中文名为列名。 实现思路 最终展示效果,即拼接出可执行执行…...
spring boot发送邮箱,java实现邮箱发送(邮件带附件)3中方式【保姆级教程一,代码直接用】
文章目录 Java发送邮箱的方式1. 基于 Javax.mail 实现关于附件上传的方法 2. 基于 org.apache.commons.mail 实现常见报错 3. 基于 spring-boot-starter-mail 实现(推荐) 实际开发时需要实现邮件发送,本文章实现如何从零实现邮件发送。也就是…...
数据集-目标检测系列- 电话 测数据集 call_phone >> DataBall
数据集-目标检测系列- 电话 测数据集 call DataBall 助力快速掌握数据集的信息和使用方式,会员享有 百种数据集,持续增加中。 需要更多数据资源和技术解决方案,知识星球: “DataBall - X 数据球(free)” 贵在坚持! …...
Zstandard压缩算法
简介 Zstandard(缩写为zstd)是一种开源的无损数据压缩算法,主要设计目标是提供高比率的压缩和快速的解压缩速度。它由Yann Collet开发,并于2015年首次发布。 特点 高比率的压缩(通常比gzip更好)。快速的解压缩速度(通常比gzip更快)。支持流式解压缩。可以选择不同的压…...
npm i 报错
nodejs中 使用npm install命令时报错 npm err! file C: \user\admin\package.json_package.json 里缺少 description 和 repository 两个n字段。-CSDN博客...
【LeetCode】力扣刷题热题100道(26-30题)附源码 轮转数组 乘积 矩阵 螺旋矩阵 旋转图像(C++)
目录 1.轮转数组 2.除自身以外数组的乘积 3.矩阵置零 4.螺旋矩阵 5.旋转图像 1.轮转数组 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 class Solution { public:void rotate(vector<int>& nums, int k) …...
EFCore HasDefaultValueSql
今天小伙伴在代码中遇到了有关 HasDefaultValue 的疑问,这里整理澄清下... 在使用 Entity Framework Core (EFCore) 配置实体时,HasDefaultValue 方法会为数据库列设置一个默认值。该默认值的行为取决于以下条件: 1. 配置 HasDefaultValue 的…...
【数据结构】栈
目录 1.1 什么是栈 1.2 顺序栈 1.2.1 特性 1.3 链式栈 1.3.1 特性 总结: 1.1 什么是栈 栈是只能在一端进行插入和删除操作的线性表(又称为堆栈),进行插入和删除操作的一端称为栈顶,另一端称为栈底。 特点:栈是先进后出FILO…...
C++初阶—CC++内存管理
第一章:C/C内存分布 int globalVar 1; static int staticGlobalVar 1; void Test() {static int staticVar 1;int localVar 1;int num1[10] { 1, 2, 3, 4 };char char2[] "abcd";const char* pChar3 "abcd";int* ptr1 (int*)malloc(si…...
【机器视觉】OpenCV 图像基本变换
文章目录 介绍机器视觉的核心组成部分机器视觉的关键技术和趋势 4. 图像的基本变换4.1 图像的放大与缩小4.2 图像的翻转4.3 图像的旋转4.4 仿射变换之图像平移4.5 仿射变换之获取变换矩阵4.6 透视变换 介绍 机器视觉(Machine Vision)是一门跨学科的领域…...
【数据库】四、数据库管理与维护
文章目录 四、数据库管理与维护1 安全性管理2 事务概述3 并发控制4 备份与恢复管理 四、数据库管理与维护 1 安全性管理 安全性管理是指保护数据库,以避免非法用户进行窃取数据、篡改数据、删除数据和破坏数据库结构等操作 三个级别认证: 服务器级别…...
徐克版射雕唤醒热血武侠魂,共赴新春侠义之约
2025年大年初一,由徐克执导的古装武侠电影《射雕英雄传:侠之大者》将在影院拉开帷幕,在精彩纷呈的春节档电影中,“大IP”“大导演”“大场面”等标签让这部电影自定档起便备受关注,其精良的制作和传统中国武侠风的设定…...
设计模式(观察者模式)
设计模式(观察者模式) 第三章 设计模式之观察者模式 观察者模式介绍 观察者模式(Observer Design Pattern) 也被称为发布订阅模式 。模式定义:在对象之间定义一个一对多的依赖,当一个对象状态改变的时候…...
能量函数和能量守恒
在之前的文章1中讨论了与循环坐标相对应的动量守恒定律和动量矩守恒定律,本文将由拉格朗日方程中导出能量函数,进一步讨论能量守恒定律,并给出耗散系统的处理方法,这其中用到的一个关键数学定理是欧拉定理(描述如何将一…...
【pycharm发现找不到python打包工具,且无法下载】
发现找不到python打包工具,且无法下载 解决方法: 第一步:安装distutils,在CMD命令行输入: python -m ensurepip --default-pip第二步:检查和安装setuptools和wheel: python -m pip install --upgrade …...
使用 Maxwell 计算母线的电动势
三相短路事件的动力学 三相短路事件在电气系统中至关重要,因为三相之间的意外连接会导致电流大幅激增。如果管理不当,这些事件可能会造成损坏,因为它们会对电气元件(尤其是母线)产生极大的力和热效应。 短路时&#x…...
【Python】Python之Selenium基础教程+实战demo:提升你的测试+测试数据构造的效率!
这里写目录标题 什么是Selenium?Selenium基础用法详解环境搭建编写第一个Selenium脚本解析脚本常用的元素定位方法常用的WebDriver方法等待机制 Selenium高级技巧详解页面元素操作处理弹窗和警告框截图和日志记录多窗口和多标签页操作 一个实战的小demo步骤一&#…...
Ubuntu中批量重命名,rename
你可以使用下面的命令批量重命名这些文件,在文件名中插入 _1: 方式一 使用 mv 命令批量重命名 如果你已经在终端中,且当前目录包含这些文件,可以执行以下命令: mv ai.c ai_1.c mv ai.h ai_1.h mv ao.c ao_1.c mv a…...