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

news2025/1/6 0:44:37

目录

  • 一、传统的 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)几部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2270645.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点击取消按钮,console出来数据更改了,页面视图没有更新

点击取消按钮,console出来数据更改了,页面视图没有更新 前言 实现效果:点击取消按钮,页面视图全部为空, 遇到的问题: 点击取消按钮,console出来数据更改了,SchemaJson 都是默认值啦…

RFID手持机与RFID工业平板在仓储物流管理系统中的选型

概述 随着物联网技术在仓储物流管理系统中的普及,RFID手持机与RFID工业平板作为基于RFID技术手持式读写器的两种重要终端设备形态,得到了广泛应用。尽管RFID手持机与RFID工业平板都具备读写 RFID标签的基本功能,使用场景较为类似&#xff0c…

UML之泛化、特化和继承

在UML(统一建模语言)中,泛化(Generalization)和特化(Specialization)是面向对象思想中继承(Inheritance)关系的重要概念,它们描述类与类(或用例与…

vue 修改vant样式NoticeBar中的图标,不用插槽可以直接用图片

使用文档中是可以直接使用图片链接的 :left-icon"require(../../assets/newImages/noticeImg.png)" <html> .... <NoticeBarmode""color"#C6C6C6"background""v-if"global_info.site_bulletin":left-icon"r…

【漫话机器学习系列】028.CP

Mallows’ Cp&#xff1a;标准化公式解析与应用 Mallows’ Cp 是一种常用的模型选择工具&#xff0c;用于在一系列候选模型中权衡拟合度和复杂性&#xff0c;帮助我们选择性能最优的模型。本文将基于其标准化公式展开详细解析&#xff0c;并探讨其应用场景、实现方法、优点与局…

vs 2022 中xml 粘贴为Class 中,序列化出来的xml 的使用

上图是visual studio 2022 中使用的粘贴功能的菜单位置 在生成的xml 中&#xff0c;有些是类似如下类型的 [System.Serializable] [System.Xml.Serialization.XmlType] public class Item {private bool isVisibleField;private bool isVisibleFieldSpecified;[System.Xml.Se…

数据库自增 id 过大导致前端时数据丢失

可以看到&#xff0c;前端响应参数是没有丢失精度的 但是在接受 axios 请求参数时出现了精度丢失 解决方案一&#xff1a;改变 axios 字符编码 axios.defaults.headers[Content-Type] application/json;charsetUTF-8; 未解决 解决方案二&#xff1a;手动使用 json.parse() …

STM32-笔记19-串口打印功能

复制项目文件夹03-流水灯&#xff0c;重命名为19-串口打印功能 打开项目 在主函数中&#xff0c;添加头文件、和串口初始化函数&#xff08;设置波特率&#xff09;和输出函数&#xff0c;如图所示&#xff1a; 软件部分就设置好了 下面是硬件部分 接线&#xff1a;使用USB…

GPU 进阶笔记(四):NVIDIA GH200 芯片、服务器及集群组网

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 1 传统原厂 GPU 服务器&#xff1a;Intel/AMD x86 CPU NVIDIA GPU2 新一代原厂 GPU 服务器&#xff1a;NVIDIA CPU NVIDIA GPU 2.1 CPU 芯片&#xff1a;Grace (ARM)2.2 GPU 芯片&#xff1a;Hopper/B…

黑马Java面试教程_P10_设计模式

系列博客目录 文章目录 系列博客目录前言1. 工厂方法模式1.1 概述1.2 简单工厂模式1.2.1 结构1.2.2 实现1.2.3 优缺点 1.3 工厂方法模式1.3.1 概念1.3.2 结构1.3.3 实现1.3.4 优缺点 1.4 抽象工厂模式1.4.1 概念1.4.2 结构1.4.3 实现1.4.4 优缺点1.4.5 使用场景 总结&#xff0…

RSA e与phi不互质(AMM算法进行有限域开根)

e与phi不互质 这一部分学习来自trup师傅的博客 针对CTFer的e与phi不互素的问题 - 跳跳糖 1&#xff1a;m^t<n from Crypto.Util.number import * from secret import flag flag bflag{*********} m bytes_to_long(flag) p getPrime(1024) q getPrime(1024) n p * q …

计算机体系结构期末复习3:GPU架构及控制流问题

目录 一、GPU设计思路 1.简化流水线、增加核数 2.单指令多线程&#xff08;SIMT&#xff09; 3.同时驻留大量线程 4.总思路&#xff1a;多线程单指令多线程 二、GPU的控制流问题 1.什么是控制流问题 2.怎么应对分支分歧 一、GPU设计思路 1.简化流水线、增加核数 2.单指…

【最新】沃德协会管理系统源码+uniapp前端+环境教程

一.系统介绍 一款基于FastAdminThinkPHPUniapp开发的商协会系统&#xff0c;新一代数字化商协会运营管理系统&#xff0c;以“智慧化会员体系、智敏化内容运营、智能化活动构建”三大板块为基点&#xff0c;实施功能全场景覆盖&#xff0c;一站式解决商协会需求壁垒&#xff0…

《机器学习》——线性回归模型

文章目录 线性回归模型简介一元线性回归模型多元线性回归模型误差项分析一元线性模型实例完整代码 多元线性模型实例完整代码 线性回归模型简介 线性回归是利用数理统计中回归分析&#xff0c;来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。 相关关系&…

数字图像总复习

目录 一、第一章 二、第三章 三、第四章 四、第五章 五、第八章 六、第十章 作业一 作业二 一、第一章 1.图像文件格式由&#xff08;文件头&#xff09;及&#xff08;图像数据&#xff09;组成 2.常见的图像文件格式&#xff1a;&#xff08;JPEG&#xff09;、&…

数据中台与数据治理服务方案[50页PPT]

本文概述了数据中台与数据治理服务方案的核心要点。数据中台作为政务服务数据化的核心&#xff0c;通过整合各部门业务系统数据&#xff0c;进行建模与加工&#xff0c;以新数据驱动政府管理效率提升与政务服务能力增强。数据治理则聚焦于解决整体架构问题&#xff0c;确保数据…

革新排版机产线:一体式IO模块引领自动化高效控制新时代

在瞬息万变的制造业浪潮中&#xff0c;自动化与智能化已成为推动产业升级的关键力量。特别是在印刷行业&#xff0c;排版机的效率与精度直接关系到产品的质量与市场竞争力。近年来&#xff0c;随着技术的不断革新&#xff0c;明达技术MR20一体式IO模块凭借其高度集成、灵活配置…

vulnhub靶场【Hogwarts】之bellatrix

前言 靶机&#xff1a;hotwarts-dobby&#xff0c;ip地址为192.168.1.69 攻击&#xff1a;kali&#xff0c;ip地址为192.168.1.16 都采用虚拟机&#xff0c;网卡为桥接模式 主机发现 使用arp-scan -l或netdiscover -r 192.168.1.1/24扫描发现主机 信息收集 使用nmap扫描端…

【数据结构】链表(1):单向链表和单向循环链表

链表 链表是一种经典的数据结构&#xff0c;它通过节点的指针将数据元素有序地链接在一起&#xff0c;在链表中&#xff0c;每个节点存储数据以及指向其他节点的指针&#xff08;或引用&#xff09;。链表具有动态性和灵活性的特点&#xff0c;适用于频繁插入、删除操作的场景…

[实用指南]如何将视频从iPhone传输到iPad

概括 将视频从 iPhone 传输到 iPad 时遇到问题&#xff1f;您可能知道一种方法&#xff0c;但不知道如何操作。此外&#xff0c;您要传输的视频越大&#xff0c;完成任务就越困难。那么如何将视频从 iPhone 传输到 iPad&#xff0c;特别是当您需要发送大视频文件时&#xff1f…