【学习日志】【TCN】时间序列卷积神经网络(1)

文章介绍了TemporalConvolutionalNetwork(TCN),一种适用于序列数据的神经网络结构。TCN基于卷积运算,特别是因果卷积和空洞卷积,以及残差连接,能够在保持时序信息的同时处理长序列。在生物信号处理的案例中,TCN展示出良好的预测性能,随着训练的进行,损失逐渐降低,表明模型能够有效学习并进行预测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. ask bing(Temporal Convolutional Network)

问:“我对CNN、RNN、TCN等神经网络没有任何基础,你能直观地给我讲一下TCN的结构、输入输出和原理吗?”
bing对TCN的解释如下:

TCN是一种用于处理序列数据的神经网络,它可以看作是一种特殊的CNN。CNN是一种用于处理图像数据的神经网络,它可以看作是一种特殊的卷积运算。卷积运算就是将一个小的滑动窗口(称为卷积核或过滤器)在一个大的数据(称为输入或特征图)上滑动,并对每个窗口内的数据进行加权求和,得到一个新的数据(称为输出或激活图)。这样就可以提取出输入中的局部特征,并减少参数数量。
TCN与CNN不同之处在于,它只在序列数据的时间维度上进行卷积运算,而不是在空间维度上。这样就可以保持序列数据的时序信息,并且使得输出只依赖于当前及之前的输入,而不会受到未来输入的影响。这种卷积运算称为因果卷积。
TCN还使用了空洞卷积,这是一种在卷积核中插入空白位置(称为膨胀因子)的技术,使得卷积核可以覆盖更长范围的输入,而不增加参数数量。这样就可以增加感受野,即输出能够感知到输入中多远距离的信息。
TCN还使用了残差连接,这是一种将每层输入直接与输出相加(称为跳跃连接)的技术,使得网络可以更容易地学习恒等映射,并防止梯度消失或爆炸。这样就可以构建更深层次的网络,并提高性能。
TCN通常由多个重复模块组成,每个模块包含两个因果空洞卷积层和一个残差连接。每个模块都有自己独立的膨胀因子和过滤器数量。最后一个模块后面还有一个全连接层或者softmax层来输出预测结果。
TCN接收一个多维数组作为输入,其中第一维表示序列长度(即时间步数),第二维表示特征数量(即信号通道数)。例如,在生物信号处理中,如果我们有1000个时间步长和8个信号通道,则我们可以将其表示为一个1000×8 的数组作为TCN 的输入。
TCN输出一个多维数组作为预测结果,其中第一维表示序列长度(即时间步数),第二维表示类别数量(即预测目标数)。例如,在生物信号分类中,如果我们有1000个时间步长和4个类别,则我们可以将其表示为一个1000×4 的数组作为TCN 的输出。

总结一下:

  1. TCN是在CNN基础上衍生的一种神经网络;CNN主要用于处理数字图像,本质是一种特殊的卷积(滤波)运算,且是在空间维度进行的;而FCN使用的是因果卷积,即不是在空间维度进行卷积运算,而是对序列(sequence)数据在时间维度进行卷积运算。
  2. TCN在算法优化上采用了:膨胀因果卷积空洞卷积(通过在卷积核中插入空白位置/膨胀因子,使卷积核覆盖更长范围的输入而不增加参数数量,实现增加感受野)、残差连接(可以构建更深层次的网络、提高性能)。
  3. TCN的结构上由多个重复模块组成,每个模块包含两个因果空洞卷积层+一个残差连接,每个模块的膨胀因子、过滤器数量都不一样;最后一个模块后再加一个全连接层/softmax层来输出预测结果。
  4. TCN输入输出数据:输入数据是一个多维数组,比如处理生物信号的话,第一维度表示信号序列长度/时间步数(取决于采样频率),第二维度表示特征数量/信号通道数(取决于采集了几个通道和特征处理的方法);输出数据也是多维数组,第一维度还是信号序列长度/时间步数,第二维度表示类别数量/预测目标数(比如根据多个通道的生物信号预测关节角度和时间的关系)。

2. 边跑边学

2.1 先跑起来

源码来源文献
源码中包括好几个案例:

The Adding Problem with various T (we evaluated on T=200, 400, 600)
Copying Memory Task with various T (we evaluated on T=500, 1000, 2000)
Sequential MNIST digit classification
Permuted Sequential MNIST (based on Seq. MNIST, but more challenging)
JSB Chorales polyphonic music
Nottingham polyphonic music
PennTreebank [SMALL] word-level language modeling (LM)
Wikitext-103 [LARGE] word-level LM
LAMBADA [LARGE] word-level LM and textual understanding
PennTreebank [MEDIUM] char-level LM
text8 [LARGE] char-level LM

我这里选择了:JSB Chorales polyphonic music和Nottingham polyphonic music,对应poly_music文件夹,因为处理预测声波数据看起来和我要应用的处理生物信号数据比较相近。当然我们可以根据自己的需求选择其他的案例跑。
README中强调了,对应每个案例跑模型时只需要运行[TASK_NAME]_test.py,比如打开music_test.py,先让他运行着。

2.2 学习原理

2.2.1 TCN网络结构直观了解(参考:机器学习进阶之 时域/时间卷积网络 TCN 概念+由来+原理+代码实现

这部分内容对应tcn.py中的class Chomp1dclass TemporalBlock
在这里插入图片描述
TCN网络结构左边一大串主要包括四个部分:
膨胀因果卷积(Dilated Causal Conv膨胀就是说卷积时的输入存在间隔采样;因果指每层某时刻的数据只依赖于之前层当前时刻及之前时刻的数据,与未来时刻的数据无关;卷积就是CNN的卷积(卷积核在数据上进行的一种滑动运算的操作)。
权重归一化(WeightNorm:通过重写深度网络的权重来进行加速。代码tcn.py中从torch.nn.utils中调用weight_norm使用。
激活函数(ReLU:挺有名的,从torch.nn中调用。
Dropout:指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。意义是防止过拟合,提高模型的运算速度。
TCN网络结构右边是残差连接:
残差连接
1*1的卷积块儿,作者说:不仅可以使网络拥有跨层传递信息的功能,而且可以保证输入输出的一致性。

2.2.2 TCN结构关系详解(参考:时间卷积网络(TCN):结构+pytorch代码,有对代码非常详细的标注)

TCN与LSTM的区别:LSTM是通过引入卷积操作使其能够处理图像信息,卷积只对一个时刻的输入图像进行操作;而TCN是利用卷积进行跨时间步提取特征。
TCN的实现——1-D FCN结构;
TCN的实现——因果卷积、膨胀因果卷积(对比膨胀非因果卷积)、残差块结构(参考ResNet,使TCN结构更具有泛化能力)
在这里插入图片描述

2.3测试结果

Namespace(clip=0.2, cuda=True, data='Nott', dropout=0.25, epochs=100, ksize=5, levels=4, log_interval=100, lr=0.001, nhid=150, optim='Adam', seed=1111)
loading Nott data...
Epoch  1 | lr 0.00100 | loss 24.20483
Epoch  1 | lr 0.00100 | loss 12.54757
Epoch  1 | lr 0.00100 | loss 10.34167
Epoch  1 | lr 0.00100 | loss 7.46519
Epoch  1 | lr 0.00100 | loss 6.22717
Epoch  1 | lr 0.00100 | loss 5.83443
Validation loss: 5.29395
Test loss: 5.40475
Saved model!

Epoch  2 | lr 0.00100 | loss 5.49445
Epoch  2 | lr 0.00100 | loss 5.08582
Epoch  2 | lr 0.00100 | loss 5.28078
Epoch  2 | lr 0.00100 | loss 5.21557
Epoch  2 | lr 0.00100 | loss 5.09972
Epoch  2 | lr 0.00100 | loss 4.87487
Validation loss: 4.88671
Test loss: 4.91229
Saved model!

Epoch  3 | lr 0.00100 | loss 4.55071
Epoch  3 | lr 0.00100 | loss 4.64663
Epoch  3 | lr 0.00100 | loss 4.62720
Epoch  3 | lr 0.00100 | loss 4.40581
Epoch  3 | lr 0.00100 | loss 4.54712
Epoch  3 | lr 0.00100 | loss 4.48989
Validation loss: 4.23855
Test loss: 4.27290
Saved model!

Epoch  4 | lr 0.00100 | loss 4.15868
Epoch  4 | lr 0.00100 | loss 4.19424
Epoch  4 | lr 0.00100 | loss 3.93361
Epoch  4 | lr 0.00100 | loss 3.87698
Epoch  4 | lr 0.00100 | loss 4.26776
Epoch  4 | lr 0.00100 | loss 4.32880
Validation loss: 4.00616
Test loss: 4.04496
Saved model!

Epoch  5 | lr 0.00100 | loss 4.02574
Epoch  5 | lr 0.00100 | loss 4.59837
Epoch  5 | lr 0.00100 | loss 4.17430
Epoch  5 | lr 0.00100 | loss 3.96050
Epoch  5 | lr 0.00100 | loss 4.04181
Epoch  5 | lr 0.00100 | loss 3.97466
Validation loss: 3.78924
Test loss: 3.84233
Saved model!

Epoch  6 | lr 0.00100 | loss 3.77337
Epoch  6 | lr 0.00100 | loss 3.78759
Epoch  6 | lr 0.00100 | loss 4.05782
Epoch  6 | lr 0.00100 | loss 3.61807
Epoch  6 | lr 0.00100 | loss 3.66880
Epoch  6 | lr 0.00100 | loss 3.68237
Validation loss: 3.69415
Test loss: 3.71941
Saved model!

Epoch  7 | lr 0.00100 | loss 3.71184
Epoch  7 | lr 0.00100 | loss 3.65575
Epoch  7 | lr 0.00100 | loss 3.50422
Epoch  7 | lr 0.00100 | loss 3.69709
Epoch  7 | lr 0.00100 | loss 3.39189
Epoch  7 | lr 0.00100 | loss 3.60912
Validation loss: 3.50421
Test loss: 3.52113
Saved model!

Epoch  8 | lr 0.00100 | loss 3.39342
Epoch  8 | lr 0.00100 | loss 3.45223
Epoch  8 | lr 0.00100 | loss 3.47272
Epoch  8 | lr 0.00100 | loss 3.47585
Epoch  8 | lr 0.00100 | loss 3.88333
Epoch  8 | lr 0.00100 | loss 3.51368
Validation loss: 3.45557
Test loss: 3.46655
Saved model!

Epoch  9 | lr 0.00100 | loss 3.38787
Epoch  9 | lr 0.00100 | loss 3.49427
Epoch  9 | lr 0.00100 | loss 3.42003
Epoch  9 | lr 0.00100 | loss 3.45465
Epoch  9 | lr 0.00100 | loss 3.44894
Epoch  9 | lr 0.00100 | loss 3.35138
Validation loss: 3.39177
Test loss: 3.39885
Saved model!

Epoch 10 | lr 0.00100 | loss 3.33982
Epoch 10 | lr 0.00100 | loss 3.33333
Epoch 10 | lr 0.00100 | loss 3.27813
Epoch 10 | lr 0.00100 | loss 3.39872
Epoch 10 | lr 0.00100 | loss 3.31045
Epoch 10 | lr 0.00100 | loss 3.47179
Validation loss: 3.35350
Test loss: 3.35821
Saved model!

Epoch 11 | lr 0.00100 | loss 3.24939
Epoch 11 | lr 0.00100 | loss 3.28225
Epoch 11 | lr 0.00100 | loss 3.31755
Epoch 11 | lr 0.00100 | loss 3.31538
Epoch 11 | lr 0.00100 | loss 3.34717
Epoch 11 | lr 0.00100 | loss 3.47794
Validation loss: 3.27830
Test loss: 3.28621
Saved model!

Epoch 12 | lr 0.00100 | loss 3.24459
Epoch 12 | lr 0.00100 | loss 3.26871
Epoch 12 | lr 0.00100 | loss 2.83995
Epoch 12 | lr 0.00100 | loss 3.24781
Epoch 12 | lr 0.00100 | loss 3.25777
Epoch 12 | lr 0.00100 | loss 3.09675
Validation loss: 3.25199
Test loss: 3.25987
Saved model!

Epoch 13 | lr 0.00100 | loss 3.18712
Epoch 13 | lr 0.00100 | loss 3.15744
Epoch 13 | lr 0.00100 | loss 3.08412
Epoch 13 | lr 0.00100 | loss 2.98677
Epoch 13 | lr 0.00100 | loss 3.23000
Epoch 13 | lr 0.00100 | loss 3.12484
Validation loss: 3.22609
Test loss: 3.22669
Saved model!

Epoch 14 | lr 0.00100 | loss 2.86843
Epoch 14 | lr 0.00100 | loss 3.05798
Epoch 14 | lr 0.00100 | loss 3.11845
Epoch 14 | lr 0.00100 | loss 3.14372
Epoch 14 | lr 0.00100 | loss 3.19728
Epoch 14 | lr 0.00100 | loss 3.12642
Validation loss: 3.20776
Test loss: 3.20785
Saved model!

Epoch 15 | lr 0.00100 | loss 3.09529
Epoch 15 | lr 0.00100 | loss 3.05085
Epoch 15 | lr 0.00100 | loss 3.12605
Epoch 15 | lr 0.00100 | loss 3.14538
Epoch 15 | lr 0.00100 | loss 3.09047
Epoch 15 | lr 0.00100 | loss 3.14403
Validation loss: 3.19157
Test loss: 3.19761
Saved model!

Epoch 16 | lr 0.00100 | loss 3.08435
Epoch 16 | lr 0.00100 | loss 3.06446
Epoch 16 | lr 0.00100 | loss 3.07964
Epoch 16 | lr 0.00100 | loss 2.92217
Epoch 
### 使用图卷积网络对时序数据进行建模的方法 #### 背景介绍 时序数据通常具有复杂的时空特性,既包含了时间维度上的变化规律,也涉及空间中的节点交互模式。为了捕捉这些复杂的关系,可以利用图神经网络(Graph Neural Network, GNN),特别是图卷积网络(Graph Convolutional Network, GCN)。GCN能够有效处理带有拓扑结构的数据,在许多实际场景中表现出色[^3]。 --- #### 图卷积与时序数据的结合方式 对于时序数据而言,其不仅存在时间序列特征,还可能嵌入到某种图形结构之中。例如交通流量预测问题中,道路网可被抽象成一张图;每条道路上的车流情况随着时间而改变,则构成了带有时序特性的图信号。因此,可以通过以下方法将图卷积应用于时序数据分析: 1. **引入时空图模型** 构造一个时空图 \(G=(V,E)\),其中顶点集合\(V\)代表不同实体(如传感器位置或用户节点),边集合\(E\)描述它们之间的关联强度或者距离等因素的影响程度。随后定义每个时刻t下的状态向量\(\mathbf{x}_i(t)\in \mathbb{R}^d\)作为第i个节点的状态表示形式。 2. **融合图卷积操作** 利用图卷积层提取局部邻域内的空间依赖关系。具体来说,假设当前输入为矩阵X=[x₁,x₂,…,xₙ]ᵀ∈ℝⁿˣᵈ以及对应的拉普拉斯算子L̂=D⁻½LD⁻½ (标准化后的版本),那么一次标准图卷积运算可以写成如下表达式: \[ H^{(l+1)}=\sigma (\tilde L H^{(l)} W^{(l)}) \] 这里H⁽ˡ⁾表示第l层隐藏单元激活值组成的n×f⁽ˡ⁾维张量;W⁽ˡ⁾是待学习权重参数;σ是非线性变换函数如ReLU()等。 3. **扩展至多步预测框架下** 当前很多研究工作都致力于开发端到端训练机制来完成对未来多个时间段内目标变量估计的任务。这类架构往往由两部分组成:一是负责编码历史观测值得模块,二是解码器用于生成未来趋势曲线。前者常采用堆叠若干层GRU/LSTM/Bi-LSTM等形式构成递归处理器件组;后者则倾向于简单全连接映射或者其他轻量化策略实现最终输出转换过程[^5]。 4. **加入注意力机制提升性能表现** 如果单纯依靠固定窗口大小的传统做法可能会忽略掉某些重要但稀疏分布的信息源贡献度差异现象的话,那么适当融入attention component将会极大地改善整体效果。通过计算query-key-value三者间相似性得分并加权求和得到新的context representation之后再反馈给后续阶段继续加工处理即可达成目的。 --- #### 技术细节说明 以下是几个关键技术要点及其对应解决思路概述: - **捕获长期依赖性** 尽管CNN本身并不擅长应对长时间跨度范围内的上下文联系挖掘挑战,然而借助特殊设计技巧比如因果卷积(causal convolutions)与扩张率逐渐增大的空洞卷积(dilated convolutions)[^2]组合运用却能很好地弥补这一缺陷。如此一来便能够在保留高效并行计算优势的同时兼顾较远距离之外的相关因素考量需求了[^4]。 - **优化损失函数设置** 鉴于真实世界应用环境中可能存在噪声干扰较大等问题影响评估准确性的情况发生概率较高,所以在制定评价指标体系过程中应当充分考虑到鲁棒性和泛化能力两个方面的要求平衡好二者之间相互制约关系至关重要。常用手段包括但不限于MAPE(mean absolute percentage error), SMAPE(symmetrical mean absolute percentage error)等等多种形式的选择依据具体情况灵活调整适用最佳方案。 - **实验验证环节安排建议** 可选取公开可用的标准测试集MOOC课程注册记录、Reddit讨论区互动行为统计资料库或者是电力供应系统异常报警日志文件等内容资源来进行对比分析试验活动开展。同时注意控制其他无关变量保持一致条件下单独考察所提改进措施有效性水平高低差别显著与否等方面内容探讨深入下去有助于进一步完善整个理论基础建设进程推进速度加快步伐迈进更高层次境界去探索未知领域奥秘所在之处发掘更多潜在价值宝藏等待我们共同发现分享成果喜悦时刻来临之际共创辉煌明天美好愿景早日成为现实可能性极大提高几率增加不少哦😊! --- ```python import torch from torch_geometric.nn import GCNConv class ST_GCN(torch.nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(ST_GCN, self).__init__() # Spatial Graph Convolution Layers self.gcn1 = GCNConv(input_dim, hidden_dim) self.gcn2 = GCNConv(hidden_dim, output_dim) # Temporal Convolution Layers with Dilated Convolutions self.tcn1 = torch.nn.Conv1d(in_channels=output_dim, out_channels=hidden_dim, kernel_size=2, dilation=1) self.tcn2 = torch.nn.Conv1d(in_channels=hidden_dim, out_channels=output_dim, kernel_size=2, dilation=2) def forward(self, data): x, edge_index = data.x, data.edge_index # Apply spatial graph convolution x = torch.relu(self.gcn1(x, edge_index)) x = torch.relu(self.gcn2(x, edge_index)) # Reshape for temporal processing and apply dilated convolutions x = x.permute(0, 2, 1).contiguous() x = torch.relu(self.tcn1(x)) x = torch.relu(self.tcn2(x)) return x.permute(0, 2, 1).contiguous() # Example usage of the model definition above. model = ST_GCN(input_dim=64, hidden_dim=128, output_dim=32) print(model) ``` --- #### 结论总结 综上所述,针对具备明显时空属性特点的时间序列型态对象实施精确高效的智能化预测任务执行流程当中,合理选用恰当类型的算法工具箱组件搭配起来协同作业显得尤为重要不可或缺。尤其是当面临高维度大规模复杂环境下运作状况监测预警场合之时更是如此这般强调突出重点意义非凡重大深远影响广泛持久绵延不绝啊🎉! ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值