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

长时间序列预测算法---Informer

目录

  • 一、传统的 Transformer 模型
  • 二、Informer原理
    • 2.1 Attention计算
    • 2.2 “积极”的Q筛选
      • 2.2.1 KL散度
      • 2.2.2 “懒惰”的q处理
    • 2.3 Encoder结构
    • 2.4 Decoder结构
      • 2.4.1 Transformer的Decoder操作
      • 2.4.2 Informer的Decoder操作
    • 2.5 Informer模型的改进
  • 三、模型应用

时间序列相关参考文章
时间序列预测算法—ARIMA
时间序列预测算法—Prophet
时间序列预测算法—LSTM
长时间序列预测算法—Informer
时间序列分类任务—tsfresh
有季节效应的非平稳序列分析
python时间序列处理
时间序列异常值检测方法
时间序列异常值处理方法

  Informer 模型是近年来在时间序列预测领域中比较新颖的一种模型,它基于 Transformer 架构,专门为长时间序列预测任务进行了优化。LSTM模型应用长序列时间预测问题性能不佳的原因:LSTM是串行网络,难以并行化,序列越长反向传播的速度越慢,从而预测速度越慢。
Informer论文
Github原代码库

一、传统的 Transformer 模型

  老牌统计学模型:ARIMAProphet;传统深度学习模型:LSTM。相关文章可以参考以上给出的链接。
  Transformer 是一种深度学习模型,最初应用于自然语言处理(NLP)任务,尤其是在机器翻译、文本生成等任务中表现出色。它的核心思想是通过自注意力机制(Self-Attention) 来捕捉序列中不同位置之间的关系。然而,Transformer 在处理长时间序列数据时会遇到一些困难。因为 Transformer 的计算复杂度是随着序列长度的平方增长的,这在处理非常长的时间序列时会变得非常慢,甚至无法处理。
传统Transformer 模型详解
在这里插入图片描述

二、Informer原理

2.1 Attention计算

  Transformer计算QKV时,从QK点积的热力图看出,越亮部分表示QK相关性越高。热力图中大部分为黑色,实验发现对于每个Q只有一小部分的K和它有较强的关系。就下图来看,8000个样本,相关性较高的可能只有2000个不到。大部分时候QK的关系都接近于0。
在这里插入图片描述
  下图纵坐标为Q,横坐标为K。每一行即为一个Q与所有K相关性的结果。红色部分就是一个“积极”的Q,从图中看出它和哪个K相关性较高。绿色部分是一个“懒惰”的Q,它和所有的K关系都很“一般”。
在这里插入图片描述
  在实际计算中,这些“懒惰”的Q不仅无法提供有效的价值,而且在Q里大部分都是这些“懒惰”的家伙。只选取“积极”的Q来计算注意力机制,而舍弃掉“懒惰”的Q的想法随之诞生。这就是Informer论文的核心:ProbSparse Attention(概率稀疏注意力机制)

2.2 “积极”的Q筛选

  ProbSparse Self-attention 采取了和均匀分布相比较的思路。均匀分布就像上图中的虚线部分,是一条直线。对于每个Q计算它和均匀分布的差异,差异越大就越“活跃”

2.2.1 KL散度

注意力的概率分布 p ( k j ∣ q i ) = k ( q i , k j ) ∑ l k ( q i , k l ) p(k_{j}|q_{i})=\frac{k(q_{i},k_{j})}{\sum_{l}k(q_{i},k_{l})} p(kjqi)=lk(qi,kl)k(qi,kj)
均匀分布 q ( k j ∣ q i ) = 1 L k q(k_{j}|q_{i})=\frac{1}{L_{k}} q(kjqi)=Lk1
这里 k ( q i , k l ) k(q_{i},k_{l}) k(qi,kl)选用的计算方式是 e q i k l T d e^{\frac{q_{i}k_{l}^T}{\sqrt{d}}} ed qiklT L k L_k Lk 就是query查询向量的长度。度量两种分布的距离—KL散度(描述两个概率分布P和Q差异的一种方法,是非对称的)
离散的KL散度定义: D ( P ∣ ∣ Q ) = ∑ i ∈ x P ( i ) ∗ [ l o g ( P ( i ) Q ( i ) ) ] D(P||Q)=\sum_{i\in{x}}P(i)*[log(\frac{P(i)}{Q(i)})] D(P∣∣Q)=ixP(i)[log(Q(i)P(i))]
连续的KL散度定义: D ( P ∣ ∣ Q ) = ∫ x P ( x ) ∗ [ l o g ( P ( i ) Q ( i ) ) ] d x D(P||Q)=\int_{x}P(x)*[log(\frac{P(i)}{Q(i)})]dx D(P∣∣Q)=xP(x)[log(Q(i)P(i))]dx
将上面的两种分布带入KL散度的计算公式,舍弃常数项,最终定义第i个query的稀疏性度量如下:
M ( q i , K ) = l n ∑ j = 1 L k e x p q i k j T d − 1 L k ∗ ∑ j = 1 L k q i k j T d M(q_{i},K)={ln\sum_{j=1}^{L_{k}}exp\frac{q_{i}k_{j}^T}{\sqrt{d}}}-\frac{1}{L_{k}}*\sum_{j=1}^{L_{k}}\frac{q_{i}k_{j}^T}{\sqrt{d}} M(qi,K)=lnj=1Lkexpd qikjTLk1j=1Lkd qikjT
公式中第一项是 q i q_{i} qi和所有k内积的Log-Sum-Exp(LSE),第二项是算术平均数,散度越大,概率分布越多样化,越可能存在关注重点。
  上述公式会有两个问题:点积对的计算复杂度是 O ( L Q ∗ L K ) O(L_{Q}*L_{K}) O(LQLK)LSE计算存在数值不稳定的风险,因为 e x e^x ex形式下,可能会数据溢出报错。
  为了解决这两个问题,作者采用了以下的方式:
● 随机采样:随机选择其中的top u ( U = L Q l n L K U = L_Q ln L_K U=LQlnLK ) 个点积对计算 M ˉ ( q i , K ) \bar M(q_i,K) Mˉ(qi,K) 。这样使复杂度降低到 O ( L l n L ) O(LlnL) O(LlnL)。(代码的默认参数中U=25)
● 用 m a x ( q i k j T d ) max(\frac{q_{i}k_{j}^T}{\sqrt{d}}) max(d qikjT)替换 l n ∑ j = 1 L k e x p q i k j T d ln\sum_{j=1}^{L_{k}}exp\frac{q_{i}k_{j}^T}{\sqrt{d}} lnj=1Lkexpd qikjT直接选择最大值与均匀分布算差异可以进一步加速计算过程。
由此第i个query的“稀疏性度量”表达式改写为:
M ˉ ( q i , K ) = m a x ( q i k j T d ) − 1 L k ∗ ∑ j = 1 L k q i k j T d \bar M(q_{i},K)={max(\frac{q_{i}k_{j}^T}{\sqrt{d}}})-\frac{1}{L_{k}}*\sum_{j=1}^{L_{k}}\frac{q_{i}k_{j}^T}{\sqrt{d}} Mˉ(qi,K)=max(d qikjT)Lk1j=1Lkd qikjT
这样可以得到每个q的 M ˉ \bar M Mˉ得分,得分越大这个q越“积极”。然后,在全部的q里选择 M ˉ \bar M Mˉ得分较大的前U个,定义为“积极”的q。来进行QKV矩阵乘法的计算。(U取值根据实际情况来定,原论文中序列长度为96,作者定义U=25,即选择得分较大的25个Q)
思考:
● 为了求解这个度量得分 M ˉ \bar M Mˉ,还是要计算全部的QK点积,这样难道不是更“复杂”了吗?并没有减少计算量或者加快计算速度。
● 而且只计算“积极”的Q,“懒惰”的q就完全抛弃吗?矩阵的形状不就发生了变化吗?这会影响后续的计算吗?
答:度量得分 M ˉ \bar M Mˉ 的计算,只是想用这个得分去筛选“积极”的q,用所有的k参与计算,计算量确实太大。实际上并没有计算全部的QK点积,而是进行了一个抽样。 将每个“积极”的Q和所有k(原论文中是96个k)计算,但在论文源码的实践中,在计算前会随机选取一部分k(原论文中是25个k)来计算,也可以作为它的分布。

2.2.2 “懒惰”的q处理

ProbSparse Self-attention根据上述的内容,允许每个k仅关注U个“积极”的q来获得ProbSparse自注意力:
A ( Q , K , V ) = S o f t m a x ( Q ˉ K T d ) V A(Q,K,V)=Softmax(\frac{\bar{Q} K^T}{\sqrt{d}})V A(Q,K,V)=Softmax(d QˉKT)V
这里的 Q ˉ \bar{Q} Qˉ就是top u个queries选拔后的。对于剩余的“懒惰”的q,作者采取的办法是,用V向量的平均来代替剩余的 Lazy queries 对应的时间点的向量。
在这里插入图片描述
  通过判定得到的 Lazy queries 的概率分布本来就接近均匀向量,也就是说这个时间点对96个时间点的注意力是均衡的,每个都差不多,所以他们atteniton计算后的向量也应当接近于全部V向量的平均。通过这样的“填充”我们最后的矩阵Z依旧是96*64的维度,但因为是在计算完“积极”Q和K点积后再“填充,计算的时间和空间复杂度都大大降低了。
在理解公式的基础上再梳理一下源码的实现步骤:
(1)输入序列长为96,在K中进行随机采样,随机选取25个K来进行后续计算。
(2)选择“积极”的Q进行计算。 (正常情况下如上推导,将每个“积极”的Q和96个k计算,但在论文源码的实践中,不需要计算那么多,用我们上一步随机选取的25个k来计算,也可以作为它的分布)
(3)每个Q有25个得分,选择25个得分里最大的作为这个q的最终得分 M ˉ ( q i , K ) \bar M(q_{i},K) Mˉ(qi,K),在96个Q中选择最终得分 M ˉ \bar M Mˉ最大的25个q。
(4)计算这25个q的QK内积,其余位置直接用V的均值来代替,得到最终的矩阵Z。

2.3 Encoder结构

  论文中提出了一种新的EncoderStack结构,由多个Encoder蒸馏层组合而成。左边绿色的部分,是Encoder的输入。由上面深绿色的scalar和下面浅绿色的stamp组成。

  • 深绿色的scalar就相当于我们之前Transformer里的input-embedding 是我们原始输入的向量。
  • 浅绿色的stamp包含之前Transformer里的 Positional Ecoding(位置编码)来表示输入序列的相对位置。在时序预测任务中,这个stamp其实由LocalTimeStamp(也就是位置编码)和GobalTimeStamp(与时序相关的编码)共同构成。
    在这里插入图片描述

  Encoder的作用是Self-attention Distilling,由于ProbSparse自相关机制有很多都是用V的mean填充的,所以天然就存在冗余的attention sorce ,因此在相邻的Attention Block之间应用卷积与池化来对特征进行下采样,所以作者在设计Encoder时,采用蒸馏的操作不断抽取重点特征,从而得到值得重点关注的特征图。从图中看到每个Encoder有3个Attention Block;每个Attention Block内有n个头权重矩阵。
  Informer的架构图并没有像Transformer一样在Encoder的左边标注“ N x N_x Nx ”来表示N个Encoder的堆叠,而是一大一小两个梯形。
  作者为了提高encoder鲁棒性,还提出了一个strick。上面的Encoder是主stack,输入整个embedding后经过了三个Attention Block,最终得到Feature Map。还可以再复制一份具有一半输入的embedding(直接取96个时间点的后48个),让它经过两个Attention Block,最终会得到和上面维度相同的Feature Map,然后把两个Feature Map拼接。作者认为这种方式对短周期的数据可能更有效一些。

2.4 Decoder结构

2.4.1 Transformer的Decoder操作

  由1.1的transformer架构图可以得出:Decoder输出后经过Linear+Softmax,Linear将输出扩展到与vocabulary size一样的维度,再经过softmax,就可以选择最高概率的词作为预测结果。
梳理一下训练好模型执行预测的过程:
Decoder:Encoder对embedding操作后的KV+开始符号=预测结果i
Decoder:Encoder对embedding操作后的KV+“i”=预测结果am
Decoder:Encoder对embedding操作后的KV+“i am”=预测结果a
Decoder:Encoder对embedding操作后的KV+“i am a”=预测结果student
Decoder:Encoder对embedding操作后的KV+“i am a student”=预测结果 结尾符号
不难看出Decoder每一步的输出都需要前一步的结果作为输入才可以,这就是step-by-step动态解码的过程。

2.4.2 Informer的Decoder操作

在这里插入图片描述
  Informer的Decoder由2层相同的多头Attention堆叠而成。Decoder的输入如下: X d e = { X t o k e n , X 0 } X_{de}=\{X_{token},X_0\} Xde={Xtoken,X0}
输入序列是由两部分拼接而来的, X t o k e n ∈ R L t o k e n ∗ d m o d e l X_{token} \in R^{L_{token}*d_{model}} XtokenRLtokendmodel是开始的token, X 0 ∈ R L y ∗ d m o d e l X_{0} \in R^{L_{y}*d_{model}} X0RLydmodel是用0填充预测序列。假设如果我们想要预测7天的温度,decoder就需要输入前面1-7天的温度,后面用0填充8-14天需要预测的温度的位置,这就是一种Mask的机制。在源码中Decoder输入长度为72,其中前48是真实值,后24是预测值。
第一步是加上mask后做自身的ProbAttention
第二步是自身计算完Attention后与encoder计算Attention
decoder的处理过程
  Decoder输入时,将所有需要预测的部分都用0来填充作为掩码。然后,增加掩码Mask后的embedding经过了ProbSparse-Attention,需要注意的一个细节是这里筛选“积极”的q之后,对于“懒惰”的q的填充方式,不同于encoder部分用V的均值(mean)填充,而是用 Cumsum,也就是每一个queries之前所有时间点V向量的累加,来防止模型关注未来的信息。得到来自Encoder的KV和Decoder第一步attention的Q之后,进行的是传统Transformer里的“Multi-head Attention”计算。在结构图中也可以看到这部分是一个“矩形”。
  Generative Style Decoder,简而言之,在Decoder部分的改进就是不同于Transformer原始架构的“一个个”预测,而是“一块块”预测。通过上图我们可以直观看出,一个forward就可以得到所有的24个预测结果。

2.5 Informer模型的改进

Motivation (Transformer的不足)Contribution (Informer的改进)
self-attention平方级的计算复杂度提出ProbSparse Self-attention筛选出重要的query,降低计算的复杂度
堆叠多层网络,内存占用遇到瓶颈提出Self-attention Distilling 减少维度和网络参数
step-by-step解码预测,速度较慢提出Generative Style Decoder,一步得到所有预测结果

  Informer解决Transformer 难以直接应用于长时间序列预测的三个重要问题;针对Transformer的三点不足,Informer分别在Attention的计算方式Encoder的蒸馏堆叠Decoder的生成式预测做出了改进,使得它更适用于长序列的时间序列预测问题。

三、模型应用

Github原代码库
在这里插入图片描述
main_informer.py主程序。帮助定义informer所需的所有参数、并执行实际的训练和预测流程。main_informer.py里的全部参数如下:

参数名称参数类型参数讲解
modelstr这是一个用于实验的参数设置,其中包含了三个选项: informer, informerstack, informerlight根据实验需求,可以选择其中之一来进行实验,默认是使用informer模型。
datastr数据,这个并不是数据集文件,而是你想要用官方定义的方法还是你自己的数据集进行定义数据加载器,如果是自己的数据集就输入custom(这也是这个开源项目做的比较好的地方,项目本身可以选择用自己的数据集)
root_pathstr这个是文件的路径,不要到具体的文件,到目录级别即可。
data_pathstr这个填写文件的名称。
featuresstr这个是特征有三个选项M,MS,S。分别是多元预测多元,多元预测单元,单元预测单元。
targetstr这个是数据集中想要预测那一列数据,假设预测的是油温OT列就输入OT即可。
freqstr时间的间隔,数据集每一条数据之间的时间间隔。
checkpointsstr训练出来的模型保存路径
seq_lenint用过去的多少条数据来预测未来的数据
label_lenint可以裂解为更高的权重占比的部分,要小于seq_len
pred_lenint预测未来多少个时间点的数据
enc_inint数据有多少列,要减去时间那一列
dec_inint数据有多少列,要减去时间那一列
c_outint如果features填写的是M那么和上面就一样,是数据列数,如果填写的MS那么这里要输入1因为你的输出只有一列数据。
d_modelint用于设置模型的维度,默认值为512。可以根据需要调整该参数的数值来改变模型的维度
n_headsint用于设置模型中的注意力头数。默认值为8,表示模型会使用8个注意力头.(有时也会用数据有多少列作为头数,可以根据自己实际数据集情况设定)
e_layersint用于设置编码器的层数
d_layersint用于设置解码器的层数
s_layersstr用于设置堆叠编码器的层数
d_ffint模型中全连接网络(FCN)的维度,默认值为2048
factorinProbSparse自注意力中的因子,默认值为5
paddingint填充类型,默认值为0,如果不够数据就填写0.
distilbool是否在编码器中使用蒸馏操作。使用–distil参数表示不使用蒸馏操作,默认为True也是我们的论文中比较重要的一个改进。
dropoutfloat丢弃的概率,防止过拟合
attnstr编码器中使用的注意力类型,默认为"prob"论文的主要改进点,提出的注意力机制。
embedstr时间特征的编码方式,默认为"timeF"
activationstr激活函数
output_attentionbool是否在编码器中输出注意力,默认为False
do_predictbool是否进行预测
mixbool在生成式解码器中是否使用混合注意力,默认为True
colsstr从数据文件中选择特定的列作为输入特征,不常用
num_workersint线程(windows最好设置成0否则会报线程错误,linux系统随便设置)
itrint实验运行的次数,默认为2
train_epochsint训练的次数
batch_sizeint一次往模型力输入多少条数据
patienceint早停机制,如果损失多少个epochs没有改变就停止训练
learning_ratefloat学习率
desstr实验描述,默认为"test"
lossstr损失函数,默认为"mse"
lradjstr学习率的调整方式,默认为"type1"
use_ampbool混合精度训练,
inversebool是否将归一化后的数据转换为原始值,这里默认为False,如果你想要转换为原来的数据改成True。
use_gpubool是否使用GPU训练,根据自身来选择
gpuintGPU的编号
use_multi_gpubool是否使用多个GPU训练。
devicesstrGPU的编号

data:包含一切和数据有关,存放数据集和数据集加载相关代码,核心代码为data_loader.py,既包括处理数据的代码,也包括导入数据的代码。
exp:实验相关,数据加载,模型训练、测试、预测的过程代码,包括了定义损失函数、定义网络结构、进行训练等神经网络的基本流程。
models:Informer模型相关内容,包含词向量编码(embed.py)、注意力机制(attn.py)、encoder编码器(encoder.py)、decoder(decoder.py)解码器和模型定义(model.py)几部分。
utils:与项目相关的辅助代码,这里包含掩码相关(masking.py)、算法衡量指标(metrics.py)、时间特征(timefreatures.py)和其它工具(tools.py)几部分。

相关文章:

长时间序列预测算法---Informer

目录 一、传统的 Transformer 模型二、Informer原理2.1 Attention计算2.2 “积极”的Q筛选2.2.1 KL散度2.2.2 “懒惰”的q处理 2.3 Encoder结构2.4 Decoder结构2.4.1 Transformer的Decoder操作2.4.2 Informer的Decoder操作 2.5 Informer模型的改进 三、模型应用 时间序列相关参…...

深入理解连接池:从数据库到HTTP的优化之道

在现代应用开发中,高效的资源管理是关键,其中连接池(Connection Pool)技术起到了至关重要的作用。本文将带你深入了解连接池的概念及其在数据库和HTTP通信中的应用,结合 JDBC 与 Druid 的关系,以及 HttpURL…...

LLM(十二)| DeepSeek-V3 技术报告深度解读——开源模型的巅峰之作

近年来,大型语言模型(LLMs)的发展突飞猛进,逐步缩小了与通用人工智能(AGI)的差距。DeepSeek-AI 团队最新发布的 DeepSeek-V3,作为一款强大的混合专家模型(Mixture-of-Experts, MoE&a…...

IIS设置IP+端口号外网无法访问的解决方案

在IIS将站点设置为IP端口访问,假设端口为8080,设好后,服务器上可以访问,外网无法访问。 通常是端口8080没有加入【入站规则】的缘故,将8080端口加入【入站规则】即可,操作如下: 一、ctrlr 输入 …...

Leetcode 最大正方形

java 实现 class Solution {public int maximalSquare(char[][] matrix) {//处理特殊情况if(matrix null || matrix.length 0 || matrix[0].length 0) return 0;int rows matrix.length;int cols matrix[0].length;int[][] dp new int[rows][cols]; //dp[i][j]的含义是以…...

数据结构与算法之动态规划: LeetCode 3105. 最长的严格递增或递减子数组 (Ts版)

最长的严格递增或递减子数组 https://leetcode.cn/problems/longest-strictly-increasing-or-strictly-decreasing-subarray/description/ 描述 给你一个整数数组 nums返回数组 nums 中 严格递增 或 严格递减的最长非空子数组的长度 示例 1 输入:nums [1,4,3,…...

【书籍连载】《软件测试架构实践与精准测试》| 有关软件测试模型的调查结果

各位软件领域的精英们,今天小编邀请你继续深入学习《软件测试架构实践与精准测试》。 《软件测试架构实践与精准测试》是作者李龙(安畅检测首席技术专家)基于软件测试“川模型”的著作。本书结合作者首次提出的软件测试新的模型“川模型”测试…...

我的博客年度之旅:感恩、成长与展望

目录 感恩有你 技能满点 新年新征程 嘿,各位技术大佬、数码潮咖还有屏幕前超爱学习的小伙伴们!当新年的钟声即将敲响,我们站在时光的交汇点上,回首过往,满心感慨;展望未来,豪情满怀。过去的这…...

【RTD MCAL 篇3】 K312 MCU时钟系统配置

【RTD MCAL 篇3】 K312 MCU时钟系统配置 一,文档简介二, 时钟系统理论与配置2.1 K312 时钟系统2.1.1 PLL2.1.2 MUX_0系统2.1.3 MUX_6 时钟输出2.1.4 option B推荐方案 2.2 EB 配置2.2.1 General 配置2.2.2 McuClockSettingConfig配置2.2.2.1 McuFIRC配置…...

力扣28找出字符串中第一个匹配项的下标

class Solution:def strStr(self, haystack: str, needle: str) -> int:# 特殊情况处理if not needle:return 0# 获取 haystack 和 needle 的长度a len(needle)b len(haystack)# 遍历 haystack,检查每个子字符串是否与 needle 匹配for i in range(b - a 1):if…...

[C#]C# random.Next(0,1)包含0和1吗

在C#中,Random.Next(minValue, maxValue) 方法生成的随机数是一个在 minValue(包含)和 maxValue(不包含)之间的整数。因此,当你调用 Random.Next(0, 1) 时,它只会生成一个整数,这个整…...

【设计模式】 基本原则、设计模式分类

设计模式 设计模式是软件工程中的一种通用术语,指的是针对特定问题的经过实践验证的解决方案。设计模式并不是最终的代码实现,而是描述了如何解决某一类问题的思路和方法。 如果熟悉了设计模式,当遇到类似的场景,我们可以快速地…...

Swift White Hawkstrider

Swift White Hawkstrider 迅捷白色陆行鸟 Swift White Hawkstrider - Item - 魔兽世界怀旧服TBC数据库_WOW2.43数据库_70级《燃烧的远征》数据库 Kaelthas Sunstrider (1) <Lord of the Blood Elves> 凯尔萨斯逐日者. 掉落 [80圣骑士][Alonsus-加丁][诺森德冒险补给品…...

node.js下载、安装、设置国内镜像源(永久)(Windows11)

目录 node-v20.18.0-x64 工具下载安装设置国内镜像源&#xff08;永久&#xff09; node-v20.18.0-x64 工具 系统&#xff1a;Windows 11 下载 官网https://nodejs.org/zh-cn/download/package-manager 版本我是跟着老师选的node-v20.18.0-x64如图选择 Windows、x64、v2…...

「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现

本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构&#xff0c;我们将创建一个动态购物车&#xff0c;支持商品的添加、移除以及实时总价计算。 关键词 UI互动应用接口定义购物车功能动态计算商品管理列表操作 一、功能说明 简易购物车功能包含以下交互&#…...

df.groupby(pd.Grouper(level=1)).sum()

df.groupby(pd.Grouper(level1)).sum() 在 Python 中的作用是根据 DataFrame 的某一索引级别进行分组&#xff0c;并计算每个分组的总和。具体来说&#xff1a; df.groupby(...)&#xff1a;这是 pandas 的分组操作&#xff0c;按照指定的规则将 DataFrame 分组。 pd.Grouper(…...

【网络安全 | 漏洞挖掘】绕过电子邮件确认实现预账户接管

未经许可,不得转载。 文章目录 正文漏洞步骤赏金正文 我测试的应用程序有多个子域名: 1、account.example.com:处理用户账户管理。 2、project.example.com:管理用户拥有或被邀请的项目。 3、org.example.com:一个新的子域,用于管理多个项目的组织。 4、collaborator.ex…...

【SpringBoot教程】SpringBoot整合Mybatis - 前后端分离项目 - vue3

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张将通过一个完整的前后端分离的任务来介绍SpringBoot整合Mybatis过程&#xff01; 文章目录 1.前言1.1 任务描述1.2 SpringBoot整合Mybatis概述1.3 完整项目…...

node.js之---事件驱动编程

详解事件驱动 事件驱动是基于什么实现的 事件驱动和I/O操作的关系 I/O操作和事件循环的关系 详解事件驱动 事件驱动编程&#xff08;Event-driven Programming&#xff09;是一种编程范式&#xff0c;其中程序的控制流是由“事件”驱动的。事件通常指的是用户操作、网络请…...

RK3588+FPGA全国产异步LED显示屏控制卡/屏幕拼接解决方案

RK3588FPGA核心板采用Rockchip RK3588新一代旗舰 级八核64位处理器&#xff0c;支持8K视频编解码&#xff0c;多屏4K输出&#xff0c;可实现12屏联屏拼接、同显、异显&#xff0c;适配多种操作系统&#xff0c;广泛适用于展览展示、广告内容投放、新零售、商超等领域实现各种媒…...

Postman测试big-event

报错500。看弹幕&#xff0c;知道可能是yml或sql有问题。 所以检查idea工作台&#xff0c; 直接找UserMapper检查&#xff0c;发现完全OK。 顺着这个error发现可能是sql有问题。因为提示是sql问题&#xff0c;而且是有now()的那个sql。 之后通过给的课件&#xff0c;复制课件…...

38. 考古学家

题目描述 有一个考古学家发现一个石碑&#xff0c;但是很可惜&#xff0c;发现时其已经断成多段&#xff0c;原地发现n个断口整齐的石碑碎片。为了破解石碑内容&#xff0c;考古学家希望有程序能帮忙计算复原后的石碑文字组合数&#xff0c;你能帮忙吗&#xff1f; 输入描述 第…...

商用车自动驾驶,迎来大规模量产「临界点」?

商用车自动驾驶&#xff0c;正迎来新的行业拐点。 今年初&#xff0c;交通部公开发布AEB系统运营车辆标配征求意见稿&#xff0c;首次将法规限制条件全面放开&#xff0c;有望推动商用车AEB全面标配&#xff0c;为开放场景的商用车智能驾驶市场加了一把火。 另外&#xff0c;…...

中建海龙:科技助力福城南产业片区绿色建筑发展

在快速发展的城市化进程中&#xff0c;绿色建筑以其环保、节能、可持续的特点日益受到重视。作为建筑工业化领域的领军企业&#xff0c;中建海龙科技有限公司&#xff08;简称“中建海龙”&#xff09;凭借其卓越的科技实力和创新举措&#xff0c;在推动绿色建筑发展方面做出了…...

selenium-side-runner + edge快速使用

安装和配置 Node.js 与 Selenium-Side-Runner 1. 安装 Node.js 为了使用 selenium-side-runner,首先需要在你的系统上安装 Node.js。Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时,它允许开发者编写服务器端代码。 通过 Winget 安装 Node.js(适用于 Windows 10/…...

ARM发布Armv9.5架构:迈向更强性能与灵活性的新时代

2024年11月30日&#xff0c;ARM正式发布了其最新的Armv9.5架构&#xff0c;这是Arm技术发展的又一重要里程碑。从表中信息来看&#xff0c;Armv9.5架构的发布标志着该公司的架构系列在性能、灵活性和可扩展性方面取得了进一步突破。本次发布不仅是技术上的提升&#xff0c;更是…...

Pytorch的自动求导模块

文章目录 torch.autograd.backward()基本用法非标量张量的反向传播保留计算图指定输入张量高阶梯度计算 与 y.backward() 的区别torch.autograd.grad()基本用法非标量张量的梯度高阶梯度计算多输入、多输出的梯度计算未使用的输入张量保留计算图 与 backward() 的区别 torch.au…...

【React】- 跨域PDF预览、下载(改文件名)、打印

我们经常会碰到跨域来方位PDF&#xff0c;同时需要下载、打印的需求&#xff0c;通常由于浏览器的安全策略&#xff0c;可以预览&#xff0c;但是下载和打印可能会受限&#xff0c;这时候怎么办呢&#xff1f; 1.创建一个隐藏的标签 要下载 iframe 中的 PDF 文件&#xff0c;…...

HuggingFace 模型文件详解:如何加载本地模型?

HuggingFace 模型文件详解 在使用 HuggingFace 下载大型语言模型&#xff08;如 LLaMA-3-1-8B&#xff09;后&#xff0c;会发现模型目录下包含多个文件和文件夹。本文将详细介绍这些文件的作用以及它们在模型加载和推理过程中的功能。 文件结构总览 models--meta-llama--Lla…...

Boost之buffer

目录 一、定义和介绍 二、示例 1、点 单点 多点 2、线 3、面 单面 多面 三、总结 四、测试代码 一、定义和介绍 buffer函数是boost库(algorithms)算法模块中的构建缓冲区函数。 其函数原型为(此处为带策略型): template<typename GeometryIn, typename MultiPolygon, typen…...

[redux] ts声明useSelector和useDispatch

先安装 安装 | Redux 中文官网 npm install react-redux npm install reduxjs/toolkit 定义一个切片 import { createSlice } from reduxjs/toolkit;const userSlice createSlice({name: user,initialState: {name: lsm,age: 24,},reducers: {}, }); //注意这里写导出redu…...

计算机网络 (19)扩展的以太网

前言 以太网&#xff08;Ethernet&#xff09;是一种局域网&#xff08;LAN&#xff09;技术&#xff0c;它规定了包括物理层的连线、电子信号和介质访问层协议的内容。以太网技术不断演进&#xff0c;从最初的10Mbps到如今的10Gbps、25Gbps、40Gbps、100Gbps等&#xff0c;已成…...

Ubuntu 23.10 换源

查看当前Ubuntu系统的版本 使用命令&#xff1a; lsb_release -a 中科大源&#xff1a; deb https://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ mantic main restricted universe multiverse deb-src https://mirrors.ustc.edu.cn/ubuntu-old-releases/ubuntu/ man…...

如何在 Ubuntu 22.04 上优化 Apache 以应对高流量网站教程

简介 在本教程中&#xff0c;我们将学习如何优化 Apache 以应对高流量网站。 当运行高流量网站时&#xff0c;确保你的 Apache Web 服务器得到优化对于有效处理负载至关重要。在本指南中&#xff0c;我们将介绍配置 Apache 以提高性能和可扩展性的基本技巧。 为高流量网站优…...

Android 性能优化:内存优化(实践篇)

1. 前言 前一篇文章Android性能优化&#xff1a;内存优化 &#xff08;思路篇&#xff09; 大概梳理了Android 内存原理和优化的必要性及应该如何优化&#xff0c;输出了一套短期和长期内存优化治理的SOP方案。 那么这一篇文章就总结下我最近在做内存优化如何实践的&#xff0…...

开源数据集成平台白皮书重磅发布《Apache SeaTunnel 2024用户案例合集》!

2025年新年临近&#xff0c;Apache SeaTunnel 社区用户案例精选&#x1f4d8;也跟大家见面啦&#xff01;在过去的时间里&#xff0c;SeaTunnel 社区持续成长&#xff0c;吸引了众多开发者的关注与支持。 为了致谢一路同行的伙伴&#xff0c;也为了激励更多人加入技术共创&…...

用python编写一个放烟花的小程序

import pygame import random # 代码解释及使用说明&#xff1a; # 首先&#xff0c;导入 pygame 和 random 库。pygame 用于创建游戏窗口和图形绘制&#xff0c;random 用于生成随机数。 # 初始化 pygame&#xff0c;并设置屏幕尺寸为 800x600 像素&#xff0c;设置窗口标题为…...

以一个实际例子来学习Linux驱动程序开发之“设备类”的相关知识【利用设备类实现对同一设备类下的多个LED灯实现点亮或关闭】

前言 对于一个设备的驱动程序来说&#xff0c;其实上层用户主要看到的、用到的就是设备文件和设备类&#xff0c;当然用得最多的是设备文件&#xff0c;虽然设备类用得不多&#xff0c;但也是每一个设备注册实例化时必须要用到的东西&#xff0c;本篇博文就以一个简单的例子说…...

培训机构Day22

今天主要还是围绕着jquery讲解的&#xff0c;没有什么可说的。 知识点&#xff1a; 常用事件类型&#xff1a; 1.click&#xff1a;单击事件。鼠标&#xff0c;或键盘都可以触发。 2.dblclick&#xff1a;双击事件。 3.contextmenu&#xff1a;右键事件。 4.键盘相关事件&…...

Synopsys软件基本使用方法

Synopsys软件基本使用方法 1 文件说明2 编译流程3 查看波形4 联合仿真 本文主要介绍Synopsys软件vcs、verdi的基本使用方法&#xff0c;相关文件可从 GitHub下载。 1 文件说明 创建verilog源文件add.v、mult.v、top.vmodule add (input signed [31:0] dina,input signed [3…...

信息科技伦理与道德1:研究方法

1 问题描述 1.1 讨论&#xff1f; 请挑一项信息技术&#xff0c;谈一谈为什么认为他是道德的/不道德的&#xff0c;或者根据使用场景才能判断是否道德。判断的依据是什么&#xff08;自身的道德准则&#xff09;&#xff1f;为什么你觉得你的道德准则是合理的&#xff0c;其他…...

手机租赁平台开发实用指南与市场趋势分析

内容概要 在当今快速变化的科技时代&#xff0c;手机租赁平台的发展如火如荼。随着越来越多的人希望使用最新款的智能手机&#xff0c;但又不愿意承担昂贵的购机成本&#xff0c;手机租赁平台应运而生。这种模式不仅为用户提供了灵活的选择&#xff0c;还为企业创造了新的商机…...

ABAQUS三维Voronoi晶体几何建模

材料晶体塑性理论与细观尺度上晶体几何模型相融合的模拟方法为探究材料在塑性变形过程中的行为机制以及晶体材料优化开辟了新途径。本案例演示在CAD软件内通过Voronoi建立晶体三维模型&#xff0c;并将模型导入到Abaqus CAE内&#xff0c;完成晶体材料的有限元建模。 在AutoC…...

职场常用Excel基础04-二维表转换

大家好&#xff0c;今天和大家一起分享一下excel的二维表转换相关内容~ 在Excel中&#xff0c;二维表&#xff08;也称为矩阵或表格&#xff09;是一种组织数据的方式&#xff0c;其中数据按照行和列的格式进行排列。然而&#xff0c;在实际的数据分析过程中&#xff0c;我们常…...

如何使用 ChatGPT Prompts 写学术论文?

第 1 部分:学术写作之旅:使用 ChatGPT Prompts 进行学术写作的结构化指南 踏上学术写作过程的结构化旅程,每个 ChatGPT 提示都旨在解决特定方面,确保对您的主题进行全面探索。 制定研究问题: “制定一个关于量子计算的社会影响的研究问题,确保清晰并与您的研究目标保持一…...

【深度学习】Java DL4J基于 LSTM 构建新能源预测模型

🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程,高并发设计,Springboot和微服务,熟悉Linux,ESXI虚拟化以及云原生Docker和K8s,热衷于探…...

Jetson系列部署YOLOv8模型教程

简介 NVIDIA Jetson系列是专为边缘计算设计的紧凑型计算模块&#xff0c;其目标用户为AI开发者、嵌入式系统工程师以及需要在设备端实时进行数据处理与AI推断的创新者。通过提供灵活的硬件平台&#xff0c;结合NVIDIA强大的GPU计算资源&#xff0c;Jetson系列能够支持复杂的机…...

【HAProxy】如何在Ubuntu下配置HAProxy服务器

HAProxy 是一款免费、开源且强大的反向代理程序&#xff0c;它为 HTTP 和 TCP 基础的应用提供了高可用性、负载均衡以及代理功能&#xff0c;因此对于管理高流量服务器&#xff08;或 Web 应用&#xff09;来说&#xff0c;通过将负载分散到多个节点服务器上&#xff0c;它是一…...

gesp(C++一级)(7)洛谷:B3863:[GESP202309 一级] 小明的幸运数

gesp(C一级)&#xff08;7&#xff09;洛谷&#xff1a;B3863&#xff1a;[GESP202309 一级] 小明的幸运数 题目描述 所有个位数为 k k k 的正整数&#xff0c;以及所有 k k k 的倍数&#xff0c;都被小明称为“ k k k 幸运数”。小明想知道正整数 L L L 和 R R R 之间&a…...

【数据库系统概论】数据库完整性与触发器--复习

在数据库系统概论中&#xff0c;数据库完整性是指确保数据库中数据的准确性、一致性和有效性的一组规则和约束。数据库完整性主要包括实体完整性、参照完整性和用户定义完整性。以下是详细的复习内容&#xff1a; 1. 数据库完整性概述 数据库完整性是指一组规则&#xff0c;这…...