示例代码:
python展开代码"""
TCN (时间卷积网络) 模型定义
"""
import torch
import torch.nn as nn
class SimpleTCN(nn.Module):
"""简单的TCN网络"""
def __init__(self, input_size=1, output_size=1, num_channels=64, kernel_size=3, num_layers=3):
super(SimpleTCN, self).__init__()
layers = []
# 第一层:输入层
layers.append(nn.Conv1d(
input_size, num_channels, kernel_size,
padding=(kernel_size-1) * (2**0), # 扩张率=1的padding
dilation=1
))
layers.append(nn.ReLU())
# 中间层:扩张率逐渐增大 (1, 2, 4, 8, ...)
for i in range(1, num_layers):
dilation = 2 ** i
padding = (kernel_size - 1) * dilation
layers.append(nn.Conv1d(
num_channels, num_channels, kernel_size,
padding=padding,
dilation=dilation
))
layers.append(nn.ReLU())
# 输出层
layers.append(nn.Conv1d(num_channels, output_size, 1))
self.network = nn.Sequential(*layers)
def forward(self, x):
"""
Args:
x: [batch, channels, length]
例如: [1, 1, 100] 表示批次1,通道1,长度100
Returns:
[batch, output_size, length]
"""
return self.network(x)
class TCNPredictor(nn.Module):
"""用于预测的TCN"""
def __init__(self, input_size=1, input_len=10, output_len=5, num_channels=32, kernel_size=3, num_layers=3):
super(TCNPredictor, self).__init__()
self.input_len = input_len
self.output_len = output_len
# TCN编码器:处理输入序列
self.encoder = SimpleTCN(
input_size=input_size,
output_size=num_channels,
num_channels=num_channels,
kernel_size=kernel_size,
num_layers=num_layers
)
# 预测头:生成未来序列
self.predictor = nn.Conv1d(num_channels, 1, 1)
def forward(self, x):
"""
Args:
x: [batch, input_size, input_len] - 过去的序列
Returns:
[batch, 1, output_len] - 未来的预测
"""
# 编码
encoded = self.encoder(x) # [batch, num_channels, input_len]
# 取最后几个时间步作为特征
features = encoded[:, :, -self.output_len:] # [batch, num_channels, output_len]
# 预测
prediction = self.predictor(features) # [batch, 1, output_len]
return prediction


https://github.com/zhouhaoyi/Informer2020
主要创新点:
组件结构:
展开代码Informer ├── enc_embedding (DataEmbedding) ├── dec_embedding (DataEmbedding) ├── encoder (Encoder) │ ├── EncoderLayer × e_layers │ │ ├── AttentionLayer (ProbAttention/FullAttention) │ │ └── Conv1D FFN │ └── ConvLayer (蒸馏层) × (e_layers-1) ├── decoder (Decoder) │ └── DecoderLayer × d_layers │ ├── Self-Attention (ProbAttention) │ ├── Cross-Attention (FullAttention) │ └── Conv1D FFN └── projection (Linear层)

展开代码## Informer vs Transformer 主要区别 ### 1. **注意力机制** - **Transformer**: Full Attention,计算所有查询的注意力,复杂度 O(L²) - **Informer**: ProbSparse Attention,只计算 top-u 个“活跃”查询,复杂度降至 O(L log L) ### 2. **编码器蒸馏** - **Transformer**: 编码器层之间没有压缩 - **Informer**: 在编码器层之间插入 ConvLayer,用卷积+池化压缩序列长度,减少计算 ### 3. **前馈网络** - **Transformer**: 标准的两层 Linear 全连接层(Linear → ReLU → Linear) - **Informer**: 用 Conv1D 卷积替代,更适合序列数据 ### 4. **嵌入层** - **Transformer**: Token Embedding + Positional Embedding - **Informer**: 额外加入时间特征嵌入(小时、日期、月份等),更适合时间序列 ### 5. **解码方式** - **Transformer**: 自回归,逐步生成下一个 token - **Informer**: 生成式,一次性预测整个未来序列 ### 6. **应用场景** - **Transformer**: 主要用于 NLP(翻译、生成等) - **Informer**: 专门用于长序列时间序列预测 **核心优势**:Informer 通过稀疏注意力和序列压缩,在处理长序列时更高效,同时保持了预测精度。

https://github.com/logtransfergit/LogTransfer
https://github.com/lucidrains/reformer-pytorch
https://github.com/thuml/Autoformer

https://github.com/MAZiqing/FEDformer

https://github.com/yuqinie98/PatchTST

https://github.com/thuml/iTransformer

https://github.com/thuml/TimesNet

时序预测是深度学习领域的重要课题,技术不断演进:
经典方法:RNN、LSTM、GRU仍然广泛使用 现代架构:Transformer及其变体在长序列预测中表现出色 前沿趋势:预训练模型、多模态学习、可解释性增强
选择合适的模型需要根据:
随着技术的不断发展,时序预测在准确性、效率和应用范围方面将持续提升。


本文作者:Dong
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!