《异常检测——从经典算法到深度学习》23 TimesNet: 用于常规时间序列分析的时间二维变化模型

news2024/11/19 0:49:10

zz# 《异常检测——从经典算法到深度学习》

  • 0 概论
  • 1 基于隔离森林的异常检测算法
  • 2 基于LOF的异常检测算法
  • 3 基于One-Class SVM的异常检测算法
  • 4 基于高斯概率密度异常检测算法
  • 5 Opprentice——异常检测经典算法最终篇
  • 6 基于重构概率的 VAE 异常检测
  • 7 基于条件VAE异常检测
  • 8 Donut: 基于 VAE 的 Web 应用周期性 KPI 无监督异常检测
  • 9 异常检测资料汇总(持续更新&抛砖引玉)
  • 10 Bagel: 基于条件 VAE 的鲁棒无监督KPI异常检测
  • 11 ADS: 针对大量出现的KPI流快速部署异常检测模型
  • 12 Buzz: 对复杂 KPI 基于VAE对抗训练的非监督异常检测
  • 13 MAD: 基于GANs的时间序列数据多元异常检测
  • 14 对于流数据基于 RRCF 的异常检测
  • 15 通过无监督和主动学习进行实用的白盒异常检测
  • 16 基于VAE和LOF的无监督KPI异常检测算法
  • 17 基于 VAE-LSTM 混合模型的时间异常检测
  • 18 USAD:多元时间序列的无监督异常检测
  • 19 OmniAnomaly:基于随机循环网络的多元时间序列鲁棒异常检测
  • 20 HotSpot:多维特征 Additive KPI 的异常定位
  • 21 Anomaly Transformer: 基于关联差异的时间序列异常检测
  • 22 Kontrast: 通过自监督对比学习识别软件变更中的错误
  • 23TimesNet: 用于常规时间序列分析的时间二维变化模型

相关:

  • VAE 模型基本原理简单介绍
  • GAN 数学原理简单介绍以及代码实践
  • 单指标时间序列异常检测——基于重构概率的变分自编码(VAE)代码实现(详细解释)

23. TimesNet: 用于常规时间序列分析的时间二维变化模型

论文名称:TIMESNET: TEMPORAL 2D-VARIATION MODELING FOR GENERAL TIME SERIES ANALYSIS
论文发表于 International Conference on Learning Representations 2023
论文下载:openreview
源码地址:https://github.com/thuml/TimesNet

23.1 论文概述

这篇论文的主要内容是介绍了一种新的方法来处理时间序列分析中的复杂时间模式。该方法将一维时间序列转换为二维张量以便更好地发现多个周期内和周期间的变化。作者提出的TimesNet with TimesBlock 是一种通用的时间序列分析骨干(Backbone)网络,可以用于多种分析任务。该论文还介绍了一些实验结果和性能比较,以证明该方法的有效性和优越性。

该论文提出的方法主要包括以下技术:

  1. TimesBlock:可以将一维时间序列自适应地转换为一组二维张量,并通过一个参数高效的Inception块来捕获二维空间中的周期内和周期间变化的模块。TimesBlock的设计使得它可以自适应地发现多个周期内和周期间的变化,并且可以通过Inception块来捕获这些变化。

  2. TimesNet:这是一种通用的时间序列分析骨干网络,可以用于多种分析任务。TimesNet使用了TimesBlock模块来处理时间序列,并利用现有的视觉骨干网络来进一步提高性能。TimesNet的设计使得它可以自适应地发现多个周期内和周期间的变化,并且可以通过Inception块来捕获这些变化。

  3. 多周期性:该论文提出了一种新的思路,即将时间序列转换为二维张量,以便更好地发现多个周期内和周期间的变化。这种方法可以更好地捕获时间序列中的复杂模式,并且可以用于多种分析任务。

  4. 实验结果和性能比较:该论文通过实验结果和性能比较证明了TimesNet的有效性和优越性。作者在五个主流的时间序列分析任务中进行了实验,包括短期和长期预测、填充、分类和异常检测。实验结果表明,TimesNet在这些任务中均取得了一致的最先进性能。

23.2 相关技术

该论文提出的方法主要包括以下技术:

在该论文的RELATED WORK模块中,作者介绍了一些与他们的工作相关的先前研究。这些研究主要涉及时间序列分析和深度学习领域的一些关键技术和方法。以下是一些相关的研究:

  1. 时间序列分析:该部分介绍了时间序列分析的一些基本概念和方法,包括时间序列的基本特征、时间序列分解、周期性分析、自回归模型、移动平均模型等。

  2. 卷积神经网络(CNN):该部分介绍了CNN在时间序列分析中的应用。CNN可以通过卷积操作来捕获时间序列中的局部模式,并且可以通过池化操作来减少参数数量和计算量。

  3. 循环神经网络(RNN):该部分介绍了RNN在时间序列分析中的应用。RNN可以通过循环连接来处理时间序列中的时序信息,并且可以通过长短时记忆(LSTM)单元来处理长期依赖关系。

  4. 注意力机制:该部分介绍了注意力机制在时间序列分析中的应用。注意力机制可以通过对时间序列中不同部分的加权来提高模型的性能,并且可以通过自注意力机制来处理时间序列中的长期依赖关系。

  5. 时空卷积神经网络(ST-CNN):该部分介绍了ST-CNN在时间序列分析中的应用。ST-CNN可以通过卷积操作来捕获时间序列中的时空信息,并且可以通过池化操作来减少参数数量和计算量。

23.3 核心方法

23.3.1 论文结构梳理

Section内容概述
1. INTRODUCTION相关背景介绍以及对本论文的概述
2. RELATED WORK相关技术介绍
3. TIMESNET论文主题部分
4. EXPERIMENTS实验部分
5. CONCLUSION AND FUTURE WORK总结以及未来工作

读者应当重点关注第3部分,如果需要对论文复现的话考虑读一些第4部分。

请一定不要太在意论文的结果复现时与你本地测试的结果不一致的问题,因为导致结果有所差异的原因很多,我们不是审稿员,也没有必要太较真实验结果。主要还是理清楚核心过程。

23.3.2 INTRODUCTION

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

由于不同的周期会导致不同的周期内和周期间的变化,多周期性可以自然地衍生出一个模块化的架构,用于时间变化建模,在那里我们可以捕获由某个特定的周期在一个模块中产生的变化。此外,这种设计使复杂的时间模式被解开,有利于时间变化建模。然而,值得注意的是,一维时间序列很难同时明确地呈现两种不同类型的变化。为了解决这个障碍,我们扩展到二维空间的时间变化的分析。具体来说,如图1所示,我们可以将一维时间序列重塑为二维张量,其中每列包含一个周期内的时间点,每行包含不同周期中同一阶段的时间点。因此,通过将一维时间序列变换为二维张量,可以突破一维空间的表征能力瓶颈,成功地将二维空间的周期内和周期间变化统一起来,得到时间二维变化。

在技术上,基于上述动机,我们超越了以前的骨干,提出了TimesNet作为一个新的任务通用模型的时间序列分析。通过TimesBlock的授权,TimesNet可以发现时间序列的多周期性,并在模块化架构中捕获相应的时间变化。具体来说,TimesBlock可以根据学习的周期自适应地将一维时间序列转换为一组二维张量,并通过参数高效的初始块进一步捕获二维空间中的周期内和周期间变化。在实验中,TimesNet在五个主流分析任务中实现了一致的最先进水平,包括短期和长期预测,插补,分类和异常检测。我们的贡献可归纳为三个方面:

  • 基于多周期性和周期内、周期间复杂的相互作用,本文提出了一种时间变化建模的模块化方法。通过将一维时间序列转换到二维空间,我们可以同时呈现期内和期间的变化。
  • 我们提出了TimesNet与TimesBlock发现多个周期和捕获时间的二维变化从变换的二维张量的参数有效的起始块。
  • 作为一个通用的任务基础模型,TimesNet在五个主流的时间序列分析任务中达到了一致的先进水平。包括详细和有见地的可视化。

23.3.3 模型结构 1 —— 将一维变分变换为二维变分

图一

如图1所示,每个时间点同时涉及两种类型的时间变化,即与其相邻区域的时间变化和不同时期之间的相同相位的时间变化,即期内变化和期间变化。然而,这种原始的时间序列的一维结构只能呈现相邻时间点之间的变化。为了解决这个问题,我们探索了时间变化的二维结构,它可以显式地呈现周期内和周期之间的变化,从而在表示能力方面具有更多优势,并有利于后续的表示学习。

具体地说,对于 C C C 个长度为 T T T 的时间序列记录变量(recorded variates),其原始一维组织形式为 X 1D ∈ R T × C \mathbf{X}_\text{1D} \in \mathbb{R}^{T×C} X1DRT×C。为了表示周期间的变化,我们需要首先发现周期。从技术上讲,我们通过快速傅里叶变换(Fast Fourier Transform,FFT)在频域中分析时间序列如下:

A = Avg (  Amp  (  FFT ( X l D ) ) ) , { f 1 , ⋯   , f k } =  arg Topk  ( A ) , p i = ⌈ T f i ⌉ , i ∈ { 1 , ⋯   , k } . (1) \mathbf{A}=\text{Avg}\left(\text{ Amp }\left(\text{ FFT}(\mathbf{X}_{\mathrm{lD}})\right)\right),\{f_1,\cdots,f_k\}=\text{ arg Topk }\left(\mathbf{A}\right),p_i=\left\lceil\frac{T}{f_i}\right\rceil,i\in\{1,\cdots,k\}.\tag{1} A=Avg( Amp ( FFT(XlD))),{f1,,fk}= arg Topk (A),pi=fiT,i{1,,k}.(1)

其中, FFT ( ⋅ ) \text{FFT}(\cdot) FFT() Amp ( ⋅ ) \text{Amp}(\cdot) Amp() 表示FFT和幅度值的计算。 A ∈ R T \mathbf{A}\in \mathbb{R}^T ART 表示每个频率的计算振幅,这是从 C C C 维平均 Avg ( ⋅ ) \text{Avg}(\cdot) Avg()。注意,第 j j j 个值 A j A_j Aj 表示与周期长度对应的频率 j j j 周期基函数的强度 ⌈ T j ⌉ \lceil {\frac{T}{j}} \rceil jT。考虑到频域的稀疏性和避免无意义的高频带来的噪声,我们只选择前 k k k 个幅度值 f 1 , . . . , f k f_1,...,f_k f1,...,fk 并获得最重要的频率 { A f 1 , . . . . , A f k } \{\mathbf{A}_{f_1},....,\mathbf{A}_{f_k}\} {Af1,....,Afk},其中 k k k 是超参数。这些选择的频率也对应于 k k k 个周期长度 { p i , . . . , p k } \{p_i, ..., p_k\} {pi,...,pk}。由于频域的共轭性,我们只考虑 { 1 , . . . , [ T 2 ] } \{1, ..., [\frac{T}{2}]\} {1,...,[2T]}内的频率。我们将等式1总结如下:

A , { f 1 , ⋯   , f k } , { p 1 , ⋯   , p k } = P e r i o d ( X 1 D ) (2) \mathbf{A},\{f_{1},\cdots,f_{k}\},\{p_{1},\cdots,p_{k}\}=\mathrm{Period}(\mathbf{X}_{1\text{D}} ) \tag{2} A,{f1,,fk},{p1,,pk}=Period(X1D)(2)

基于选定的频率 { f 1 , . . . , f k } \{f_1, ..., f_k\} {f1,...,fk} 和相应的周期长度 { p 1 , . . . , p k } \{p_1, ..., p_k\} {p1,...,pk},我们可以通过以下等式将一维时间序列 X 1 D ∈ R T × C \mathbf{X}_{1D} \in \mathbb{R}^{T\times C} X1DRT×C 整形为多个二维张量:

X 2 D i = Reshape ⁡ p i , f i ( Padding ⁡ ( X 1 D ) ) , i ∈ { 1 , ⋯   , k } (3) \mathbf{X}_{2 \mathrm{D}}^i=\operatorname{Reshape}_{p_i, f_i}\left(\operatorname{Padding}\left(\mathbf{X}_{1 \mathrm{D}}\right)\right), i \in\{1, \cdots, k\} \tag{3} X2Di=Reshapepi,fi(Padding(X1D)),i{1,,k}(3)

其中 Padding ( ⋅ ) \text{Padding}(\cdot) Padding() 是将时间序列沿着时间维度扩展零,以使其与 Reshape p i , f i \text{Reshape}_{p_i, f_i} Reshapepi,fi ( ⋅ ) (\cdot) () 兼容,其中 p i p_i pi f i f_i fi 分别表示变换后的二维张量的行数和列数。注意, X 2D i ∈ R p i × f i × C \mathbf{X}^i_{\text{2D}} \in \mathbb{R}^{p_i \times f_i \times C} X2DiRpi×fi×C 表示基于频率 f i f_i fi 的第 i i i 个整型时间序列,其列和行分别表示相应周期长度 p i p_i pi 下的周期内变化和周期间变化。最终,如图2 所示,基于所选择的频率和估计的周期,我们获得一组二维张量 X 2 D 1 , . . . , X 2 D k \mathbf{X}^1_{2D},...,\mathbf{X}^k_{2D} X2D1,...,X2Dk ,其指示由不同周期导出的 k k k 个不同的时间二维张量。

图2

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

23.3.4 模型结构 2 —— TIMESBLOCK

图3
如图3所示,我们以残差方式组织 TimesBlock。具体地说,对于长度为 T T T 的一维输入时间序列 X 1D ∈ R T × C \mathbf{X}_{\text{1D}} \in \mathbb{R}^{T \times C} X1DRT×C,我们首先通过嵌入层 X 1D 0 = Embed ( X 1 D ) \mathbf{X}^0 _{\text{1D}} = \text{Embed}(\textbf{X}_{1\text{D}}) X1D0=Embed(X1D) 将原始输入投影到深度特征 X 1D 0 ∈ R T × d \mathbf{X}^0_{\text{1D}} \in \mathbb{R}^{T\times d} X1D0RT×d 模型中。对于 TimesNet 的第 l l l 层,输入是 X 1D l − 1 ∈ R T × d m o d e l \mathbf{X}^{l−1}_{\text{1D}} \in \mathbb{R}^{T\times d_{model}} X1Dl1RT×dmodel,该过程可以形式化为:

X 1 D l =  TimesBlock  ( X 1 D l − 1 ) + X 1 D l − 1 (4) \mathbf{X}_{1 \mathrm{D}}^l=\text { TimesBlock }\left(\mathbf{X}_{1 \mathrm{D}}^{l-1}\right)+\mathbf{X}_{1 \mathrm{D}}^{l-1} \tag{4} X1Dl= TimesBlock (X1Dl1)+X1Dl1(4)

如图3所示,对于第 L L L 个TimesBlock,整个过程包括两个连续的部分:捕获时间二维变化和自适应地聚合来自不同时期的表示。

捕获时间2D变化 类似于等式1,我们可以通过 Period ( ⋅ ) \text{Period}(\cdot) Period() 估计深度特征 X 1D l − 1 \mathbf{X}^{l-1}_{\text{1D}} X1Dl1 的周期长度。基于估计的周期长度,我们可以将一维时间序列变换到二维空间,得到一组二维张量,从这组张量中我们可以得到二维空间的参数有效信息表示,并得到一组二维张量,从这组张量中我们可以方便地得到参数有效起始块的信息表示。该过程形式化如下:

A l − 1 , { f 1 , ⋯   , f k } , { p 1 , ⋯   , p k } = Period ⁡ ( X 1 D l − 1 ) X 2 D l , i = Reshape ⁡ p i , f i ( Padding ⁡ ( X 1 D l − 1 ) ) , i ∈ { 1 , ⋯   , k } X ^ 2 D l , i = Inception ⁡ ( X 2 D l , i ) , i ∈ { 1 , ⋯   , k } X ^ 1 D l , i = Trunc ⁡ ( Reshape ⁡ 1 , ( p i × f i ) ( X ^ 2 D l , i ) ) , i ∈ { 1 , ⋯   , k } , (5) \begin{aligned} \mathbf{A}^{l-1},\left\{f_1, \cdots, f_k\right\},\left\{p_1, \cdots, p_k\right\} & =\operatorname{Period}\left(\mathbf{X}_{1 \mathrm{D}}^{l-1}\right) \\ \mathbf{X}_{2 \mathrm{D}}^{l, i} & =\operatorname{Reshape}_{p_i, f_i}\left(\operatorname{Padding}\left(\mathbf{X}_{1 \mathrm{D}}^{l-1}\right)\right), i \in\{1, \cdots, k\} \\ \widehat{\mathbf{X}}_{2 \mathrm{D}}^{l, i} & =\operatorname{Inception}\left(\mathbf{X}_{2 \mathrm{D}}^{l, i}\right), i \in\{1, \cdots, k\} \\ \widehat{\mathbf{X}}_{1 \mathrm{D}}^{l, i} & =\operatorname{Trunc}\left(\operatorname{Reshape}_{1,\left(p_i \times f_i\right)}\left(\widehat{\mathbf{X}}_{2 \mathrm{D}}^{l, i}\right)\right), i \in\{1, \cdots, k\}, \tag{5} \end{aligned} Al1,{f1,,fk},{p1,,pk}X2Dl,iX 2Dl,iX 1Dl,i=Period(X1Dl1)=Reshapepi,fi(Padding(X1Dl1)),i{1,,k}=Inception(X2Dl,i),i{1,,k}=Trunc(Reshape1,(pi×fi)(X 2Dl,i)),i{1,,k},(5)

其中 X 2D l , i ∈ R p i × f i × d m o d e l \mathbf{X}_{\text{2D}}^{l,i}\in\mathbb{R}^{p_i\times f_i \times d_{model}} X2Dl,iRpi×fi×dmodel 表示第 i i i 个变换而得的二维向量。转换完成以后,我们通过参数有效的初始块将2D张量处理为初始 Inspection ( ⋅ ) \text{Inspection}(\cdot) Inspection(),该初始块涉及多维2D核(multi-scale 2D kernels),是最知名的视觉骨干之一。然后,我们将学习到的2D表示 X ^ 2 D l , i \widehat{\mathbf{X}}_{2 \mathrm{D}}^{l, i} X 2Dl,i 转换回一维空间 X ^ 1 D l , i ∈ R T × d model  \widehat{\mathbf{X}}_{1 \mathrm{D}}^{l, i} \in \mathbb{R}^{T \times d_{\text {model }}} X 1Dl,iRT×dmodel  从而用于聚合,其中我们使用 Trunc ( ⋅ ) \text{Trunc}(\cdot) Trunc() 将长度为 ( p i × f i ) (p_i \times f_i) (pi×fi) 的填充序列截断为原始长度 T T T

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

自适应聚合 最后,我们需要为下一层融合 k k k 个不同的 1D 表示 { X ^ 1 D l , 1 , ⋯   , X ^ 1 D l , k } \left\{\widehat{\mathbf{X}}_{1 \mathrm{D}}^{l, 1}, \cdots, \widehat{\mathbf{X}}_{1 \mathrm{D}}^{l, k}\right\} {X 1Dl,1,,X 1Dl,k}。受自相关的启发,幅度 A A A 可以反映所选择的频率和周期的相对重要性,从而对应于每个变换的2D张量的重要性。因此,我们基于振幅聚合1D表示:

A ^ f 1 l − 1 , ⋯   , A ^ f k l − 1 = Softmax ⁡ ( A f 1 l − 1 , ⋯   , A f k l − 1 ) X 1 D l = ∑ i = 1 k A ^ f i l − 1 × X ^ 1 D l , i (6) \begin{aligned} \widehat{\mathbf{A}}_{f_1}^{l-1}, \cdots, \widehat{\mathbf{A}}_{f_k}^{l-1} & =\operatorname{Softmax}\left(\mathbf{A}_{f_1}^{l-1}, \cdots, \mathbf{A}_{f_k}^{l-1}\right) \\ \mathbf{X}_{1 \mathrm{D}}^l & =\sum_{i=1}^k \widehat{\mathbf{A}}_{f_i}^{l-1} \times \widehat{\mathbf{X}}_{1 \mathrm{D}}^{l, i} \end{aligned} \tag{6} A f1l1,,A fkl1X1Dl=Softmax(Af1l1,,Afkl1)=i=1kA fil1×X 1Dl,i(6)

由于周期内和周期之间的变化已经涉及到多个高度结构化的2D张量,TimesBlock可以同时完全捕获多尺度时间2D变化。因此,TimesNet可以实现比直接从1D时间序列更有效的表示学习。

2D视觉主干的通用性 受益于1D时间序列到时间2D变化的转换,我们可以选择各种计算机视觉骨干来代替表示学习的初始块,例如广泛使用的 ResNet 和ResNeXt,先进的 ConvNeXt 和基于注意力的模型。因此,我们的时间二维变化设计也将一维时间序列与蓬勃发展的二维视觉骨干连接起来,使时间序列分析能够利用计算机视觉社区的发展。一般来说,用于表示学习的更强大的2D主干将带来更好的性能。考虑到性能和效率(图4右),我们基于参数高效的初始块进行主要实验,如公式5所示。
在这里插入图片描述

23.4 论文实验

特此声明:如果不打算基于这篇论文的源码开发,亦或者不需要了解代码细节,完全不需要运行所有源码。主要把论文思路梳理清楚就差不多了。因为复现这些源码比较麻烦,至少需要一张还过得去的显卡。不过有条件、有时间、感兴趣的同学可以试试。

23.4.1 数据准备

前去本论文的提到的github地址可以找到对应的谷歌云盘、清华云盘(当前已经失效)以及百度云盘的下载链接,如果觉得麻烦的话,可以考虑访问我的夸克云盘,地址如下:

夸克云盘
链接:https://pan.quark.cn/s/b167f0d17234
提取码:wQKX

数据文件解压的相对地址等,将在后面介绍。

23.4.2 源码准备

前去本论文提到的github地址,把源码clone或下载到本地,然后把前面下载的数据集压缩包接下,注意相对路径,而且需要把解压后的文件夹重命名为 dataset。如图所示:
在这里插入图片描述

23.4.3 安装相关依赖

为了尽可能地减少麻烦,先保证使用的python版本与论文实验一致,即 3.8,其次确保安装好了与显卡对应的驱动,确保cuda可用,这些方面的坑太多太多,所以为了避免继续踩坑,尽可能与原论文的版本保持一致。如图所示:
在这里插入图片描述

23.4.4 执行脚本

安装依赖以后,我们不妨写几行代码,确保 cuda 可用。

import torch

print(torch.cuda.is_available())

在这里插入图片描述
接着可以直接执行作者已经给我们写好的脚本,注意,可能出现GPU不能用的情况

在这里插入图片描述
编辑这个 sh 脚本文件,并如图所示,修改使用GPU的索引为0,因为我只有一张显卡,只能使用索引为0的显卡。

在这里插入图片描述
在这里插入图片描述
其他脚本皆是如此,如果只有一张显卡,就把脚本第一行最后一个值改为 0

其他的脚本运行方法均是如此,唯一需要注意的就是 export CUDA_VISIBLE_DEVICES=0 确保是自己想用的显卡的序号。

23.5 总结

本篇论文介绍了一种新的方法,通过将一维时间序列转换为二维张量来处理时间序列分析中的复杂时间模式。作者提出的TimesNet with TimesBlock是一种通用的时间序列分析模型,可以发现时间序列中的多个周期内和周期间的变化。该模型在五个主流时间序列分析任务中表现出了很好的通用性和性能。作者还提出了未来的研究方向,包括在大规模预训练中进一步探索利用TimesNet作为骨干的方法,以及在实际应用中的潜在应用。

论文提供的源码集成了一些其他的算法,对于需要做比对实验的人来说,简直是太方便了。并且,如果你设计了某个算法,可以基于TimesNet 源码架构进行开发,然后合并到代码仓库中作为其中一个算子,简单方便直观,给作者团队点赞 ~

Smileyan
2023.10.31 22:58

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

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

相关文章

信息安全与网络安全的关系

前言 说说信息安全与网络安全的关系 如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉【入门&进阶全套282G学习资源包免费分享!】 一、包含和被包含的关系 信息安全包括网络安全,信息安全还包括操作系统安全&…

走进数字孪生街区:城市管理的创新利器

数字孪生街区是现代城市规划和发展的一项重要创新,它结合了数字技术和城市规划,为未来的城市提供了更好的设计、管理和可持续发展的机会。数字孪生街区的兴起将深刻改变我们的城市生活。 数字孪生街区的核心特点 数字孪生街区是一种数字模型&#xff0c…

赋能人才培养丨维视教育亮相2023年全国高校仪器类专业教学研讨会

​ 10月27—29日,为期三天的“2023 年全国高校仪器类专业教学研讨会”于西安市建国饭店成功举办。会议由教育部高等学校仪器类专业教学指导委员会、中国机械工业教育协会仪器科学与技术专业委员会、中国仪器仪表学会教育工作委员会主办,西安理工大学承办…

MySQL - 索引详解以及优化;Explain执行计划

官网文档 MySQL :: MySQL 5.7 Reference Manual :: 8.3 Optimization and Indexes Mysql优化(出自官方文档) - 第八篇(索引优化系列) 目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列&…

详解numpy.meshgrid()方法使用

这篇文章主要介绍了详解numpy.meshgrid()方法使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值。 一句话解释numpy.meshgrid()——生成网格点坐标矩阵。 网格点是什么?坐标矩阵又是什么鬼?看个…

公司员工的销售微信号如何管理?

在当今数字化时代,微信已成为企业营销的重要工具之一。其中,公司员工的销售微信号更是企业拓展业务、提高品牌知名度的重要途径。然而,如何有效管理这些销售微信号,确保其正常运行并避免潜在风险,已成为许多企业面临的…

IOI车机系统刷机和改包笔记2 - 改包脚本

前言: 最近对雪佛兰改包需求感兴趣的网友很多,大家都遇上了很多奇怪的问题,这里就我自己使用的环境和脚本进行分享,供大家参考。 1. 准备环境 我这里使用Ubuntu系统进行操作 andyandy-vm:~$ sudo lsb_release -a No LSB module…

Web3 React项目Dapp获取智能合约对象

上文Web3 整理React项目 导入Web3 并获取区块链信息中,我们在react搭建的dapp中简单拿到了我们区块链中的账号授权信息 那 我们继续 先终端运行 ganache -d将ganache环境起起来 然后 我们运行 dapp 拿到授权列表 回到上文结束的一个状态 然后 我们发布一下自己的…

Qt 常用方法 获取磁盘总大小、可用空间、文件夹大小 文件大小B KB M G转换

1.通过QFile获取文件大小 注意&#xff1a;返回的是字节个数 QFile file("E:/59.raw");if (file.open(QIODevice::ReadOnly)) {qDebug() << file.size();// byte} else {qDebug() << "文件打开失败&#xff01;";} 通过QFileInfo获取文件大小…

初识CSS层叠样式表

文章目录 CSS介绍CSS层叠样式表1.CSS组成2.CSS语法结构3.注释语法4.引入CSS的多种方式 CSS选择器1.CSS基础选择器2.CSS组成选择器3.分组与嵌套4.CSS属性选择器5.CSS伪类选择器6.CSS伪元素选择器 选择器优先级CSS继承选择器的优先级 CSS样式调节字体样式文本颜色文本属性 边框di…

c++从入门到放弃,小白踩坑记录1

c从入门到放弃,小白踩坑记录1 错误问题描述 没有与这些操作数匹配的运算符操作数类型为std::basic_ostream <char,std::char traits <char > > < < <unknown-type > 错误代码 #include<iostream> int main(void) {std::cout << "…

从小白到精通:揭秘perf工具的全部功能与操作技巧

揭秘perf工具的全部功能与操作技巧 一、引言二、理解perf工具的基本概念三、安装与配置perf工具3.1、不同操作系统的perf工具安装3.2、perf工具的配置选项和环境设置 四、perf工具的常用命令和功能4.1、perf工具的基本命令结构和常用参数4.2、perf工具的常见用法和功能4.3、per…

医学AI智能导诊系统源码

医院智能导诊系统是一款基于人工智能和大数据技术开发的医疗辅助软件&#xff0c;旨在为患者提供更加便捷、精准的医疗服务。 一、什么是智能导诊系统&#xff1f; 智能导诊系统是一种基于人工智能和大数据技术开发的医疗辅助软件&#xff0c;它能够通过对患者的症状、病史等信…

Qt扫盲-QFontDatabase理论

QFontDatabase理论 一、概述二、常用功能 一、概述 QFontDatabase 类提供有关底层窗口系统中可用字体的信息。 这个类最常见的用途是查询数据库中的字体系列列表()以及每个系列可用的 pointSizes() 和 styles()。pointSizes() 的另一种替代方法 是smoothSizes()&#xff0c;它…

使用传感器融合的前方碰撞预警-(Forward Collision Warning Using Sensor Fusion)

这个例子matlab自动驾驶工具箱中关于使用传感器融合的前方碰撞预警-(Forward Collision Warning Using Sensor Fusion)例子&#xff0c;其展示了如何通过融合视觉和雷达传感器的数据来跟踪车辆前方的物体&#xff0c;从而实现前向碰撞预警系统的开发与验证。 1 概述 前方碰撞…

Java体系性能测试进阶必须了解的知识点——Thread Dump

Thread Dump定义 Java Thread dump记录了线程在jvm中的执行信息&#xff0c;可以看成是线程活动的日志。Java线程转储文件有助于分析应用程序和死锁情况中的瓶颈。Thread Dump是非常有用的诊断Java应用问题的工具。它提供了当前活动线程的快照及JVM中所有Java线程的堆栈跟踪信…

【计算机网络】传输层——TCP

目录 1.概念2.可靠性概念3.TCP协议格式序号和确认序号窗口大小六个标志位 4.TCP可靠性保障确认应答机制&#xff08;ACK&#xff09;超时重传机制连接管理机制流量控制拥塞控制 5.TCP提高性能滑动窗口延迟应答捎带应答 6.面向字节流7.粘包问题8.TCP异常情况9.TCP总结 1.概念 T…

MES 价值点之数据追随

在现代制造业中&#xff0c;数据追溯已经越来越得到重视&#xff0c;特别是那些推行精益生产的企业重要性就更加突出了&#xff0c;而制造执行系统&#xff08;MES&#xff09;作为一种关键的生产管理工具&#xff0c;是能很好的为制造企业提供数据追溯功能。今天&#xff0c;和…

基因家族扩张与收缩分析-CAFE5

CAFE(Computational Analysis of gene Family Evolution)是一款以解释系统发育历史的方式分析基因家族大小变化的软件&#xff0c;这种分析常被称为基因家族收缩扩张(Gene family expansions and contractions)分析。 CAFE使用出生和死亡过程来模拟用户指定的系统发育树中的基…

剑指JUC原理-7.线程状态与ReentrantLock

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码&#x1f525;如果感觉博主的文章还不错的话&#xff0c;请&#x1f44d;三连支持&…