Skip to content

Level 4 short_forecast 五段总览

Abstract

入口:

python
short_forecast(x_enc, x_mark_enc, x_dec, x_mark_dec)

这一层解释:

short_forecast(...) 内部先按顺序怎么推进,再按逻辑分块怎样嵌套。

1. 上一层与当前层位置

上一层是:

当前层是:

  • Level 4
  • 对应 forward(...) 里真正进入的业务主体 short_forecast(...)

这一层还不展开:

  • DataEmbedding 内部三种编码细节
  • Encoder 内部 attention / FFN
  • Decoder 内部 self-attention / cross-attention / projection

1.5 本层入口参数含义

  • x_enc
    • encoder 数值输入
  • x_mark_enc
    • encoder 时间特征输入
  • x_dec
    • decoder 数值输入
  • x_mark_dec
    • decoder 时间特征输入
  • pred_len
    • 决定最终截取多少步
  • d_model
    • 决定 embedding / encoder / decoder 的隐藏维

1.6 本层输出含义

本层输出还不是 forward(...) 的最终返回值,而是:

python
dec_out

含义是:

short_forecast(...) 已经把四输入经过标准化、embedding、encoder、decoder、反标准化处理,得到可供 forward(...) 截取未来段的结果。

2. 当前层第一性

short_forecast(...) 的第一性是:

把 Informer 的四输入,沿着“标准化 -> embedding -> encoder -> decoder -> 反标准化”的主链,变成可以截取 pred_len 的预测结果。

2.5 当前层张量流水线图

先只从“输入张量进入流水线”这个角度固定全貌:

text
x_enc
-> 4A 标准化
-> 4B enc_embedding
-> 4C encoder
-> encoder 上下文 enc_out

x_dec
-> 4B dec_embedding
-> 4D decoder(读取 enc_out)
-> 4E 反标准化
-> 返回 dec_out
-> forward 中截最后 pred_len

当前真实例子里:

text
x_enc:      (4, 96, 7)
x_mark_enc: (4, 96, 4)
x_dec:      (4, 72, 7)
x_mark_dec: (4, 72, 4)

-> enc_embedding: (4, 96, 32)
-> encoder:       (4, L', 32)
-> dec_embedding: (4, 72, 32)
-> decoder:       (4, 72, 7)
-> forward 截取:  (4, 24, 7)

3. 先看顺序图

4. 再看抽象索引树

这棵树表示的是:

  • 同一个函数 short_forecast(...) 的内部逻辑分块
  • 不是五个彼此独立的对象
  • 也不是五个平行的外层模块

5. 当前例子的具体落地

当前真实例子:

  • x_enc.shape = (4, 96, 7)
  • x_mark_enc.shape = (4, 96, 4)
  • x_dec.shape = (4, 72, 7)
  • x_mark_dec.shape = (4, 72, 4)

关键参数:

  • seq_len = 96
  • label_len = 48
  • pred_len = 24
  • d_model = 32
  • c_out = 7

所以这一层的大 shape 主线是:

text
x_enc:      (4, 96, 7)
-> embedding -> (4, 96, 32)
-> encoder   -> (4, L', 32)

x_dec:      (4, 72, 7)
-> embedding -> (4, 72, 32)
-> decoder   -> (4, 72, 7)
-> forward 截最后 pred_len -> (4, 24, 7)

5.5 五段的 input / output 语义

4A 标准化

  • input:原始 x_enc
  • output:标准化后的 x_enc
  • 含义:把 encoder 数值输入拉到更稳定的尺度

4B DataEmbedding

  • input:x_enc/x_decx_mark_enc/x_mark_dec
  • output:enc_out/dec_out 隐藏表示
  • 含义:把原始数值与时间特征映射成 d_model 维表示

4C Encoder

  • input:enc_out
  • output:带上下文关系的 enc_out
  • 含义:把历史窗口编码成可被 decoder 读取的上下文

4D Decoder

  • input:dec_outenc_out
  • output:回到 c_out 通道空间的 decoder 结果
  • 含义:把 decoder 自身输入与 encoder 上下文融合

4E 反标准化 + 截取点

  • input:decoder 输出
  • output:回到原始尺度、可被 forward(...) 截取的结果
  • 含义:为最终保留未来 pred_len 段做准备

6. 这一层已经有哪些下层文档

4B DataEmbedding

入口接口:

python
enc_out = self.enc_embedding(x_enc, x_mark_enc)
dec_out = self.dec_embedding(x_dec, x_mark_dec)

下钻文档:

4C Encoder

入口接口:

python
enc_out, attns = self.encoder(enc_out, attn_mask=None)

下钻文档:

4D Decoder

入口接口:

python
dec_out = self.decoder(dec_out, enc_out, x_mask=None, cross_mask=None)

下钻文档:

7. 当前层和附录的关系

这一层的参数解释和文件树不再占用 Level。

需要查时再看:

8. 下一层怎么走

当前 BFS 顺序固定为:

  1. 4B DataEmbedding
  2. 4C Encoder
  3. 4D Decoder

也就是:

  1. 04B-DataEmbedding
  2. 04C-Encoder主链
  3. 04D-Decoder主链

9. 只留一句

Level 4 要同时掌握两件事:short_forecast(...) 的执行顺序,以及它内部的五个逻辑分块。

*记录并在线阅读我的笔记*