【时间序列预测 2023 ICLR】TimesNet

news2024/11/18 7:37:41

【时间序列预测 2023 ICLR】TimesNet

论文题目:TIMESNET: TEMPORAL 2D-VARIATION MODELING FOR GENERAL TIME SERIES ANALYSIS

中文题目:TimesNet:用于一般时间序列分析的时态二维变异建模

论文链接:https://arxiv.org/abs/2210.02186

论文代码:https://github.com/thuml/TimesNet

论文团队:清华大学

发表时间:2022年10月

DOI:

引用:

引用数:18(截止时间:2023年7月26号)

摘要

时间序列分析在天气预报、异常检测、行为识别等广泛应用中具有重要意义。 本文重点研究了时间变化建模,这是广泛分析任务的共同关键问题。 以往的方法试图直接从一维时间序列中完成这一任务,但由于复杂的时间模式,这是极具挑战性的。 在观测时间序列多周期的基础上,我们将复杂的时间变化分解为多重的周期内和周期间变化。 为了解决一维时间序列在表示能力上的局限性,我们将一维时间序列转化为一组基于多个周期的二维张量,从而将时间变化的分析扩展到二维空间。 该变换可以将周期内和周期间的变化分别嵌入到二维张量的列和行中,使二维变化易于用二维核模型来模拟。 在技术上,我们提出了TimesNet和TimesBlock作为时间序列分析的任务通用主干网。 TimesBlock能够自适应地发现多周期性,并通过参数有效的起始块从变换后的二维张量中提取复杂的时间变化。 我们提出的TimesNet在主流时间序列分析任务中实现了一致的最新技术,包括短期和长期预测、估算、分类和异常检测。

1. 简介

时间序列分析在广泛的现实世界应用中得到了广泛的应用,如用于天气预报的气象因子预测(Wu et al.,2021)、用于数据挖掘的缺失数据归算(Friedman,1962)、用于工业维护的监测数据异常检测(Xu et al.,2021)和用于动作识别的轨迹分类(Franceschi et al.,2019)。 由于其巨大的实用价值,时间序列分析受到了极大的关注(Lim&Zohren,2021)。

不同于其他类型的顺序数据,如语言或视频,时间序列是连续记录的,每个时间点只保存一些标量。 由于单一的时间点往往不能提供丰富的语义信息,许多研究都集中在时间序列的时间变化上,因为时间变化具有更丰富的信息量,能够反映时间序列的连续性、周期性、趋势性等内在特性。然而,现实世界的时间序列的变化往往涉及复杂的时间模式,其中多种变化(如上升、下降、上升等)相互混合和重叠,使得时间变化建模具有极大的挑战性。

特别是在深度学习领域,利用深度模型强大的非线性建模能力,人们提出了许多捕捉真实时间序列中复杂时间变化的方法。 一类方法基于马尔可夫假设采用递归神经网络(RNN)对连续时间点进行建模(Hochreiter&Schmidhuber,1997;Lai et al.,2018;Shen et al.,2020)。 然而,这些方法通常无法捕捉长期依赖关系,并且它们的作用受到顺序计算范式的影响。 另一类方法利用沿时间维的卷积神经网络(TCN)来提取变异信息(Franceschi et al.,2019;He&Zhao,2019)。 此外,由于一维卷积核的局部性,它们只能模拟相邻时间点之间的变化,因而在长期相关性方面仍然失败。 最近,具有注意力机制的变压器被广泛应用于序列建模(Brown et al.,2020;Dosovitskiy et al.,2021;Liu et al.,2021b)。 在时间序列分析中,许多基于Transformer的模型采用注意力机制或其变体来捕捉时间点之间的时间依赖关系(Li et al.,2019;Kitaev et al.,2020;Zhou et al.,2021;2022)。 但是,由于时间依赖关系在复杂的时间模式中会被严重遮蔽,注意力机制很难直接从分散的时间点中找出可靠的依赖关系(Wu et al.,2021)。

本文从多周期这一新的维度对时间序列进行分析,以解决复杂的时间变化问题。 首先,我们观察到现实世界的时间序列通常具有多周期性,例如天气观测的日变化和年变化,电力消费的周变化和季度变化。 这些多个周期相互重叠和相互作用,使得变异建模变得棘手。 其次,对于每一个周期,我们发现每一个时间点的变化不仅受其邻近区域的时间模式的影响,而且与相邻周期的变化密切相关。 为了清楚起见,我们将这两种时间变化分别命名为周期内变化和周期间变化。 前者表示一个时期内的短期时间模式。 后者可以反映连续不同时期的长期趋势。 注意,对于没有明显周期性的时间序列,其变化将主要由周期内变化所控制,并与周期长度为无限长的时间序列等效。

由于不同的周期会导致不同的周期内和周期间的变化,多周期自然可以导出一个模块化的时间变化建模体系结构,在该体系结构中,我们可以在一个模块中捕获由某个周期导出的变化。 此外,该设计使复杂的时态模式得以分离,有利于时态变化建模。 然而值得注意的是,一维时间序列很难同时显式地呈现两种不同类型的变化。 为了解决这一障碍,我们将时间变化的分析扩展到2D空间。 具体地说,如图1所示,我们可以将一维时间序列重塑为一个二维张量,其中每列包含一个周期内的时间点,每行包含不同周期中同一相位的时间点。 因此,通过将一维时间序列转化为一组二维张量,可以突破原来一维空间中表示能力的瓶颈,成功地将周期内变化和周期间变化统一到二维空间中,得到时间上的二维变化。

image-20230727182715555

在技术上,基于上述动机,我们超越了以往的研究框架,提出了TimesNet作为一种新的时间序列分析的任务通用模型。 通过TimesBlock的支持,TimesNet可以发现时间序列的多周期性,并在模块化的体系结构中捕获相应的时间变化。 具体而言,TimesBlock可以根据学习到的周期自适应地将一维时间序列转换为一组二维张量,并通过参数有效的起始块进一步捕获二维空间中的周期内和周期间变化。 通过实验,TimesNet在五个主流分析任务中达到了一致的最先进水平,包括短期和长期预测、估算、分类和异常检测。 我们的贡献概括为三个方面:

  • 考虑到时间变化的多周期性以及周期内和周期间的复杂交互作用,我们提出了一种模块化的时间变化建模方法。 通过将一维时间序列转换到二维空间,我们可以同时呈现周期内和周期间的变化。

  • 我们提出了带有TimesBlock的TimesNet,通过一个参数有效的起始块来发现多个周期,并从转换后的二维张量中捕获时间上的二维变化。

  • 作为一个任务通用的基础模型,TimesNet在五个主流时间序列分析任务中实现了一致的最先进水平。 包括详细和有洞察力的可视化。

2. 相关工作

时间变化模型作为时间序列分析的一个关键问题已经得到了很好的研究。

许多经典方法假设时间变化遵循预定义的模式,如ARIMA (Anderson & Kendall, 1976), Holt-Winter (Hyndman & Athanasopoulos, 2018)和Prophet (Taylor & Letham, 2018)。然而,现实世界中时间序列的变化通常过于复杂,无法用预定义的模式覆盖,这限制了这些经典方法的实际适用性。

近年来,针对时间建模提出了许多深度模型,如基于MLP、TCN、rnn的模型(Hochreiter & Schmidhuber, 1997;Lai et al., 2018;Franceschi等,2019)。技术上,基于mlp的方法(Oreshkin等人,2019;查卢等人,2022年;曾等,2023;Zhang et al., 2022)在时间维度上采用MLP,并将时间依赖性编码为MLP层的固定参数。基于tcn(2019)的方法通过沿着时间维度滑动的卷积核捕获时间变化。基于rnn的方法(Hochreiter & Schmidhuber, 1997;Lai et al., 2018;Gu等人,2022)利用循环结构,通过时间步间的状态过渡隐式捕捉时间变化。请注意,这些方法都没有考虑由周期性衍生的时间二维变化,这是在本文中提出的。

此外,《Transformer》在时间序列预测方面表现出色(Zhou et al., 2021;Liu et al., 2021a;Wu等人,2021年;周等,2022)。利用注意机制,他们可以发现时间点之间的时间依赖性。特别是,Wu等人提出了带有自相关机制的自耦器,以捕捉基于学习周期的时序时序相关性。此外,为了解决复杂的时间模式,Autoformer还提出了一种深度分解体系结构,以获取输入序列的季节性和趋势部分。随后,FEDformer (Zhou et al., 2022)采用专家混合设计增强季节趋势分解,并在频域内提出稀疏注意。与以往的方法不同,我们通过探索时间序列的多周期来解开复杂的时间模式,并首次通过公认的计算机视觉主干捕获二维空间中的时间二维变化。

值得注意的是,与以往的方法不同,我们不再局限于一个特定的分析任务,尝试提出一个任务通用的时间序列分析基础模型。

3. 方法

基于时间序列的多周期特性,我们提出了一种模块化的TimesNet来捕获不同周期的时间模式。 对于每一个周期,为了捕捉相应的周期内和周期间变化,我们在时间网中设计了一个时间块,它可以将一维时间序列转换到二维空间,并通过一个参数有效的起始块来同时建模两种类型的变化。

image-20230727182733312

3.1 将一维变化转化为二维变化

如图1所示,每一个时间点同时包含两种与相邻区域和同一相位在不同时期之间的时间变化,即周内变化和周间变化。 然而,这种原始的一维时间序列结构只能反映相邻时间点之间的变化。 为了克服这一缺陷,我们探索了时间变化的二维结构,它可以显式地表达周期内和周期间的变化,从而在表征能力方面具有更大的优势,有利于后续的表征学习。

具体而言,对于具有 C C C个记录变量的长度 T T T时间序列,原始一维组织为 X l D ∈ R T × C \mathbf{X}_{\mathrm{lD}}\in\mathbb{R}^{T\times C} XlDRT×C。 为了表现周期间的变化,我们首先需要发现周期。 在技术上,我们用快速傅立叶变换(FFT)对时间序列进行频域分析如下:
A = A v g ( A m p ( F F T ( X I D ) ) ) , { f 1 , ⋯   , f k } = arg ⁡ T o p k ( A ) , p i = ⌈ T f i ⌉ , i ∈ { 1 , ⋯   , k } . \mathbf{A}=\mathrm{Avg}\left(\mathrm{Amp}\left(\mathrm{FFT}(\mathbf{X}_{\mathrm{ID}})\right)\right),\{f_{1},\cdots,f_{k}\}=\arg\mathrm{Topk}(\mathbf{A}),p_{i}=\left\lceil\frac{T}{f_{i}}\right\rceil,i\in\{1,\cdots,k\}. A=Avg(Amp(FFT(XID))),{f1,,fk}=argTopk(A),pi=fiT,i{1,,k}.
这里, F F T ( ⋅ ) \mathrm{FFT}(\cdot) FFT() Amp ⁡ ( ⋅ ) \operatorname{Amp}(\cdot) Amp()表示FFT和幅度值的计算。 A ∈ R T \textbf{A}\in\mathbb{R}^{T} ART表示每个频率的计算振幅,该振幅从C维用AVG(·)平均。 注意,第j个值 A j \mathbf{A}_{j} Aj表示频率j周期基函数的强度,对应于周期长度 ⌈ T j ⌉ \lceil{\frac{T}{j}}\rceil jT。 考虑到频域的稀疏性和避免无意义的高频带来的噪声(Chatfield,1981;Zhou et al.,2022),我们只选取顶部的k个振幅值,以非归一化振幅 { A f 1 , ⋯   , A f k } \{\mathbf{A}_{f_{1}},\cdots,\mathbf{A}_{f_{k}}\} {Af1,,Afk}得到最有意义的频率 { f 1 , ⋯   , f k } \{f_{1},\cdots,f_{k}\} {f1,,fk},其中k为超参数。 这些选择的频率也对应于k个周期长度 { p 1 , ⋯   , p k } \{p_{1},\cdots,p_{k}\} {p1,,pk}。 由于频域的共轭性,我们只考虑 { 1 , ⋯   , [ T 2 ] } \{1,\cdots,[\frac{T}{2}]\} {1,,[2T]}内的频率。 我们将等式1总结如下:
A , { f 1 , ⋯   , f k } , { p 1 , ⋯   , p k } = P e r i o d ( X 1 D ) . \mathbf{A},\{f_{1},\cdots,f_{k}\},\{p_{1},\cdots,p_{k}\}=\mathrm{Period}(\mathbf{X}_{1\mathrm{D}}). A,{f1,,fk},{p1,,pk}=Period(X1D).
根据所选择的频率 { f 1 , ⋯   , f k } \{f_{1},\cdots,f_{k}\} {f1,,fk}和相应的周期长度 { p 1 , ⋯   , p k } \{p_{1},\cdots,p_{k}\} {p1,,pk},我们可以通过以下方程将一维时间序列 X l D ∈ R T × C ˉ \mathbf{X}_{\mathrm{lD}}\in\mathbb{R}^{T\times\bar{C}} XlDRT×Cˉ重塑为多个二维张量:
X 2 D i = R e s h a p e p i , f i ( P a d d i n g ( X l D ) ) , i ∈ { 1 , ⋯   , k } , \mathbf{X}_{2\mathbf{D}}^{i}=\mathrm{Reshape}_{p_{i},f_{i}}(\mathrm{Padding}(\mathbf{X}_{\mathrm{lD}})),i\in\{1,\cdots,k\}, X2Di=Reshapepi,fi(Padding(XlD)),i{1,,k},
其中 P a d d i n g ( ⋅ ) Padding(·) Padding()是将时间序列沿时间维扩展零,使其与 R e s h a p e p i , f i ( ⋅ ) \mathrm{Reshape}_{p_{i},f_{i}}(\cdot) Reshapepi,fi()兼容,其中 p i p_{i} pi f i f_i fi分别表示变换后的二维张量的行数和列数。 注意, X 2 D i ∈ R p i × f i × C \mathbf{X}_{2\mathrm{D}}^{i}\in\mathbb{R}^{p_{i}\times f_{i}\times C} X2DiRpi×fi×C表示基于frequency-fi的第i次整形时间序列,其列和行分别表示相应周期长度pi下的周期内变化和周期间变化。 最后,如图2所示,基于所选择的频率和估计的周期,我们得到一组2D张量 { X 2 D 1 , ⋯   , X 2 D k } \{\mathbf{X}_{2\mathrm{D}}^{1},\cdots,\mathbf{X}_{2\mathrm{D}}^{k}\} {X2D1,,X2Dk},它表示由不同周期导出的k个不同的时间2D变化。

值得注意的是,这种变换给变换后的二维张量带来了两种类型的局部,即相邻时间点之间的局部(列,周期内变化)和相邻周期之间的局部(行,周期间变化)。 因此,时间的二维变化可以很容易地被二维核处理。

3.2 Times Block

如图3所示,我们以残差方式组织时间块(He et al.,2016)。 具体而言,对于长度为 t 1 D t 1D t1D的输入时间序列 X 1 D ∈ R T × C \mathbf{X}_{\mathrm{1D}}\in\mathbb{R}^{T\times C} X1DRT×C,我们首先通过嵌入层 X l D 0 = E m b e d ( X l D ) \mathbf{X}_{\mathrm{lD}}^{0}=\mathrm{Embed}(\mathbf{X}_{\mathrm{lD}}) XlD0=Embed(XlD)将原始输入投影到深度特征 X l D 0 ∈ R T × d m o d e l \mathbf{X}_{\mathrm{lD}}^{0}\in\mathbb{R}^{T\times d_{\mathrm{model}}} XlD0RT×dmodel中。 对于TimesNet的第L层,输入为 X l D l − 1 ∈ R T × d m o d e l \mathbf{X}_{\mathrm{lD}}^{l-1}\in\mathbb{R}^{T\times d_{\mathrm{model}}} XlDl1RT×dmodel,过程可以形式化为:
X l D l = T i m e s B l o c k ( X l D l − 1 ) + X l D l − 1 . \mathbf{X}_{\mathrm{lD}}^{l}=\mathrm{TimesBlock}\left(\mathbf{X}_{\mathrm{lD}}^{l-1}\right)+\mathbf{X}_{\mathrm{lD}}^{l-1}. XlDl=TimesBlock(XlDl1)+XlDl1.
如图3所示,对于第 l l l个时间块,整个过程包括两个连续的部分:捕获时间的2D变化和自适应地聚合来自不同时期的表示。

捕捉时间二维变化 与公式 1 类似,我们可以通过 P e r i o d ( ⋅ ) \mathrm{Period}(\cdot) Period()来估计深度特征 X l D l − 1 \mathbf{X}_{\mathrm{lD}}^{l-1} XlDl1的周期长度。根据估计的周期长度,我们可以转换一维时间序列 转换到二维空间,得到一组二维张量,我们可以通过参数效率高的截取块方便地从中获取信息表示。具体过程如下
A l − 1 , { f 1 , ⋯   , f k } , { p 1 , ⋯   , p k } = P e r i o d ( X l D l − 1 ) , x 2 D l , i = R e s h a p e p i , f i ( P a d d i n g ( X l D l − 1 ) ) , i ∈ { 1 , ⋯   , k } x ^ 2 D l , i = I n c e p t i o n ( X 2 D l , i ) , i ∈ { 1 , ⋯   , k } X ^ 1 D l , i = T r u n c ( R e s h a p e 1 , ( p i × f i ) ( X ^ 2 D l , i ) ) , i ∈ { 1 , ⋯   , k } , \begin{aligned} \mathbf{A}^{l-1},\{f_{1},\cdots,f_{k}\},\{p_{1},\cdots,p_{k}\}& =\mathrm{Period}\left(\mathbf{X}_{\mathrm{lD}}^{l-1}\right), \\ \mathbf{x}_{2\mathrm{D}}^{l,i}& =\mathrm{Reshape}_{p_{i},f_{i}}\left(\mathrm{Padding}(\mathbf{X}_{\mathrm{lD}}^{l-1})\right),i\in\{1,\cdots,k\} \\ \hat{\mathbf{x}}_{2\mathrm{D}}^{l,i}& =\mathrm{Inception}\left(\mathbf{X}_{2\mathrm{D}}^{l,i}\right),i\in\{1,\cdots,k\} \\ {\hat{\mathbf{X}}}_{\mathrm{1D}}^{l,i}& =\mathrm{Trunc}\left(\mathrm{Reshape}_{1,(p_{i}\times f_{i})}\left(\widehat{\mathbf{X}}_{2\mathrm{D}}^{l,i}\right)\right),i\in\{1,\cdots,k\}, \end{aligned} Al1,{f1,,fk},{p1,,pk}x2Dl,ix^2Dl,iX^1Dl,i=Period(XlDl1),=Reshapepi,fi(Padding(XlDl1)),i{1,,k}=Inception(X2Dl,i),i{1,,k}=Trunc(Reshape1,(pi×fi)(X 2Dl,i)),i{1,,k},

image-20230727185017393

其中, X 2 D l , i ∈ R p i × f i × d m o d e l \mathbf{X}_{2\mathrm{D}}^{l,i}\in\mathbb{R}^{p_{i}}\times f_{i}\times d_{\mathrm{model}} X2Dl,iRpi×fi×dmodel是第i次变换的二维张量。 转换后的二维张量由参数有效的inception块(Szegedy et al.,2015)作为inception(·)进行处理,该块涉及多尺度的二维核,是公认的视觉主干之一。 然后将学习到的二维表示 X ^ 2 D l , i \widehat{\mathbf{X}}_{2\mathrm{D}}^{l,i} X 2Dl,i变换回一维空间 X ^ l D l , i ∈ R T × d m o d e l \widehat{\mathbf{X}}_{\mathrm{lD}}^{l,i}\in\mathbb{R}^{T\times d_{\mathrm{model}}} X lDl,iRT×dmodel进行聚合,其中用Trunc(·)将长度为 ( p i × f i ) (p_{i}\times f_{i}) (pi×fi)的填充级数截断为原始长度T。

需要注意的是,受益于一维时间序列的转换,起始块中的二维核可以同时聚合多尺度的期内变化(列)和期间变化(行),覆盖相邻的时间点和相邻的时期。此外,为了提高参数效率,我们对不同的重塑二维张量 { X 2 D l , 1 , ⋯   , X 2 D l , k } \{\mathbf{X}_{2\mathrm{D}}^{l,1},\cdots,\mathbf{X}_{2\mathrm{D}}^{l,k}\} {X2Dl,1,,X2Dl,k}采用共享起始块,这可以使模型大小不受超参数 k 选择的影响。

自适应聚合最后,我们需要融合k个不同的1D表示 { X ^ l D l , 1 , ⋯   , X ^ l D l , k } \{\widehat{\mathbf{X}}_{\mathrm{lD}}^{l,1},\cdots,\widehat{\mathbf{X}}_{\mathrm{lD}}^{l,k}\} {X lDl,1,,X lDl,k}进行下一层。 受自相关(Wu et al.,2021)的启发,振幅A可以反映所选频率和周期的相对重要性,从而对应于每个转换后的2D张量的重要性。 因此,我们聚集了基于振幅的一维表示:
A ^ f 1 l − 1 , ⋯   , A ^ f k l − 1 = S o f t m a x ( A f 1 l − 1 , ⋯   , A f k l − 1 ) x l D l = ∑ i = 1 k A ^ f i l − 1 × X ^ l D l , i . \begin{gathered} \widehat{\mathbf{A}}_{f_{1}}^{l-1},\cdots,\widehat{\mathbf{A}}_{f_{k}}^{l-1} =\mathrm{Softmax}\left(\mathbf{A}_{f_{1}}^{l-1},\cdots,\mathbf{A}_{f_{k}}^{l-1}\right) \\ \mathbf{x}_{\mathrm{lD}}^{l} =\sum_{i=1}^k\widehat{\mathbf{A}}_{f_i}^{l-1}\times\widehat{\mathbf{X}}_{\mathrm{lD}}^{l,i}. \end{gathered} A f1l1,,A fkl1=Softmax(Af1l1,,Afkl1)xlDl=i=1kA fil1×X lDl,i.
由于周期内和周期间的变化已经包含在多个高度结构化的二维张量中,TimesBlock可以同时完全捕捉多尺度的时间二维变化。 因此,TimesNet可以实现比直接从一维时间序列中学习更有效的表示方法。

由于一维时间序列向时间二维变化的转换,我们可以选择各种计算机视觉主干来代替表征学习的起始块,如广泛使用的ResNet(He et al.,2016)和ResNext(Xie et al.,2017)、先进的ConvNext(Liu et al.,2022b)和基于注意力的模型(Liu et al.,2021b)。 因此,我们的时间二维变化设计也将一维时间序列与蓬勃发展的二维视觉主干连接起来,使时间序列分析利用计算机视觉社区的发展。 一般来说,更强大的2D表示学习骨干将带来更好的性能。 考虑到性能和效率(图4右),我们基于参数有效的inception块进行主要实验,如公式5所示。

4. 实验

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

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

相关文章

大专同事一个人7天完成CRM系统开发,怪不得月薪3w

在当今的快节奏商业环境中,成功的关键是敏捷和高效。这使得开发自己的客户关系管理系统(CRM)成为许多企业的迫切需求。CRM有助于跟踪和优化销售线索,管理客户交互,并提高业务效率。但是,对于许多企业来说&a…

大学毕业后,我就去当了2个月外卖骑手,哭了一整晚

先简单介绍一下自己,我来自长沙,大学学的的物流管理专业,现在就职于一家互联网公司,从事软件测试工作。 我来自长沙县的一个偏远农村,家里兄弟姐妹多,父母无力负担我的学费,很多时候学费都是靠姐…

智慧工厂4G+蓝牙+UWB+RTK人员定位系统解决方案

人员定位在智慧工厂的应用正逐渐受到重视,通过使用现代化的技术和智能终端设备,工厂管理者能够实时定位和跟踪员工的位置,方便进行人员调度管理和监督人员的工作情况;人员遇到紧急情况,可通过定位设备一键报警求救&…

智慧消防:如何基于视频与智能分析技术搭建可视化风险预警平台?

一、背景分析 消防安全是一个重要的话题,涉及到每个人的生活和安全。每年都会发生大量的火灾,给人们带来极大的危害,摧毁了大量的财产,甚至造成了可怕的人员伤亡。而消防安全监督管理部门人员有限,消防安全监管缺乏有…

2.2 模型与材质基础

一、渲染管线与模型基础 1. 渲染管线 可编程阶段(蓝色区域): 1顶点着色器 2几何着色器 3片元着色器 2. 模型的实现原理 UV:在建模软件中,进行UV展开,UV会放在一个横向为U纵向为V,范围&#xff0…

TEE GP(Global Platform)功能认证实验室

TEE之GP(Global Platform)认证汇总 GP认证实验室主要面向功能认证、SE安全认证、TEE安全认证,对于TEE来说,则分为TEE功能认证和TEE安全认证。本文对功能认证相关实验室机构进行总结和介绍。 一、国内3家 二、国外3家 参考: GlobalPlatform …

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测

回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测 目录 回归预测 | MATLAB实现POA-CNN-BiLSTM鹈鹕算法优化卷积双向长短期记忆神经网络多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 MATLA…

安全杂记 - js中的this关键字

javascript里什么是this this是js中的一个关键字&#xff0c;它是函数在运行时生成的一个内部对象&#xff0c;是属性和方法。 this就是属性或方法“当前”所在的对象&#xff0c;也就是调用函数的那个对象 this的使用场合 1.函数调用 <script>var a100;function test…

jenkins部署vue项目

文章目录 1 先安装node.js上传到linux并解压 jenkins 创建任务执行脚本 build Stepsvue jenkins shell 脚本 (jenkins-web.sh)启动 如何在linux上安装jenkins可以看上一篇 linux安装jenkins(详细步骤) 1 先安装node.js 建议最好跟你本地安装版本一致,减少没有必要的麻烦:node.…

UCloud上线可商用LLaMA2镜像,助力AGI应用发展

随着人工智能技术的快速发展&#xff0c;大模型应用在自然语言处理、图像识别、智能交互等领域展现出了巨大的潜力&#xff0c;为企业带来了更多创新和商机。众多企业纷纷将大模型应用于产品开发和业务优化中&#xff0c;希望通过提升智能化水平和用户体验来赢得竞争优势。近日…

【黑马头条之文章详情-静态文件生成】

本笔记内容为黑马头条项目的文章详情-静态文件生成部分 目录 一、思路分析 二、实现步骤 基础知识可参考下面两篇文章 【黑马头条之对象存储服务MinIO】_蛋饼吧的博客-CSDN博客 【黑马头条之freemarker入门】_蛋饼吧的博客-CSDN博客 一、思路分析 文章端创建app相关文章时…

如何获得SOLIDWORKS全认证资格证书!

SolidWorks认证考试 完成SolidWorks认证考试并获得专业SolidWorks认证是一项伟大的成就。它不仅在你的简历上自豪地闪耀&#xff0c;而且还向雇主、决策者和同事展示了你对软件的技能和知识水平。公司通常会将某些策略和标准设定为一项业务&#xff0c;以帮助保持在竞争中的领头…

桃子叶片病害数据集

1.分为三类 健康的桃子叶片 &#xff0c;251张 桃疮痂病一般&#xff0c;857张 桃疮痂病严重&#xff0c;770 张 数据集链接 import os import jsonimport torch from PIL import Image from torchvision import transforms import tkinter as tk from tkinter import file…

MySQL 日志管理

目录 一、四种日志介绍 1.1 错误日志 1.2 通用查询日志 1.3 二进制日志 1.4 慢查询日志 三、查询日志是否已开启 四、分割二进制日志 MySQL的日志默认保存在数据库文件的存储目录&#xff08;一般为/usr/local/mysql/data/&#xff09;。也可以修改配置文件&#xff0c;…

低代码可视化开发,是时候去学一学了!

低代码一词&#xff0c;有人认为它是第四代编程语言&#xff0c;有人认为它是开发模式的颠覆&#xff0c;也有人认为它是企业管理模式的变革……有很多声音&#xff0c;社区讨论很热烈。 即使这样&#xff0c;至今也有不少人还不知道这项技术&#xff0c;今天笼统的介绍一下低代…

认识需求不得不思考的5大因素

需求对项目非常重要&#xff0c;如果对需求认识不清晰不明确&#xff0c;往往会导致需求不完整&#xff0c;需求重复等问题&#xff0c;引起很多不必要的风险&#xff0c;因此如何认识需求&#xff0c;需要思考哪些因素&#xff0c;就显得尤为重要。以下5大因素&#xff0c;是我…

Spring 6【Lombok、基于注解方式的IoC】(六)-全面详解(学习总结---从入门到深化)

目录 十一、Lombok 十二、基于注解方式的IoC 十一、Lombok 在上面的课程讲解过程中&#xff0c;每次修改类的属性&#xff0c;都需要重新生成Getter/Setter方法及toString()方法。我 们可以借助Lombok来简化代码。 1 环境准备 下载Lombok插件 IDEA 2022.3.2 默认集成Lomb…

ICASSP 2023 | MCROOD: MULTI-CLASS RADAR OUT-OF-DISTRIBUTION DETECTION

原文链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg4MjgxMjgyMg&mid2247486484&idx1&snd43f92ca0230753e77f54557054653d6&chksmcf51beedf82637fb27d4cbb9279f273298779dabe25f7775cb93469787bcc12c1b6b2caec979#rd ICASSP 2023 | MCROOD: MULTI-CLASS…

golang利用go mod巧妙替换使用本地项目的包

问题 拉了两个项目下来&#xff0c;其中一个项目依赖另一个项目&#xff0c;因为改动了被依赖的项目&#xff0c;想重新导入测试一下。 解决办法 go.mod文件的require中想要被代替的包名在replace中进行一个替换&#xff0c;注意&#xff1a;用来替换的需要用绝对路径&#xf…

IDEA打开text文本文件弹出窗口“选择一个应用以打开此.text文件“

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…