不能直接 pip install informer,因为原作者未发布pypi包、无setup.py,且代码非模块化设计;核心需重写probsparseattention(显式指定device)、convlayer(补permute操作)和timefeatureembedding(扩展freq支持)。

PyTorch 官方不提供 Informer 的实现,也没有 Informer 类;必须手动复现或依赖第三方仓库,且原论文代码(GitHub: thuml/Informer)是 PyTorch 1.7+ 兼容但未封装为 pip 包,直接 import 会报错。
为什么不能直接 pip install informer?
原作者发布的代码是完整训练脚本形式,不是可安装的 Python 包——没有 setup.py,也没有发布到 PyPI。常见错误包括:
ModuleNotFoundError: No module named 'informer'- 克隆仓库后直接
import informer失败(缺少__init__.py或路径未加入sys.path) - 用
torch==2.0+运行原始代码时,torch.nn.MultiheadAttention的attn_mask行为变更导致 attention score 计算异常
实际做法是:把关键模块(Informer, ProbMask, Encoder 等)从 models/informer.py 和 models/attn.py 中提取出来,按需重构为可 import 的模块。
核心组件必须重写哪几处?
原实现重度依赖全局路径和硬编码参数,迁移到新项目需聚焦三个可复用单元:
-
ProbSparseAttention:注意ProbMask生成逻辑在torch.triu和torch.zeros组合时,PyTorch ≥1.10 后需显式指定device,否则 mask 与 query 不在同一设备上 -
ConvLayer(在 EncoderLayer 中用于局部特征增强):原代码用nn.Conv1d(in_channels=d_model, out_channels=d_model, kernel_size=3),但输入 shape 是[B, L, D],需先permute(0, 2, 1)再卷积,漏掉这步会导致维度错乱 - 时间特征嵌入:
TimeFeatureEmbedding使用month/day/hour等周期性编码,但原始代码只支持固定频率(如'h'),若你数据是 15 分钟粒度,需扩展time_features函数并修改freq_map
如何快速验证模型结构是否正确?
别等训练完才发现 shape 报错——用最小输入做前向推理检查:
x = torch.randn(32, 96, 7) # [B, L, D] x_mark = torch.randn(32, 96, 4) # time features model = Informer(enc_in=7, dec_in=7, c_out=7, seq_len=96, label_len=48, pred_len=24) y = model(x, x_mark, x, x_mark) # 注意:Informer 的 forward 需要 enc & dec 输入 + mark assert y.shape == (32, 24, 7)
关键点:
-
label_len必须 ≤seq_len,且pred_len是你要预测的步数,不是总长度 -
dec_input在训练时是 teacher-forcing 模式:用torch.cat([x[:, -label_len:, :], torch.zeros(B, pred_len, D)], dim=1)构造,不是全零 - 如果
yshape 不对,大概率是ProbMask返回的mask维度没对齐(应为[B, H, L, L]),或conv1d输入未permute
真正卡住人的地方不在注意力公式,而在数据预处理和维度流转——比如 x_mark 要和 x 的 seq_len 对齐,但 decoder 的 x_mark 长度是 label_len + pred_len,这个长度差异不画图推一遍很容易传错。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!











