基于CNN和gMLP的时间序列分类模型
基于CNN和gMLP的时间序列分类模型详解
本篇讲解一个结合了卷积神经网络(CNN)和门控多层感知机(gMLP)的深度学习模型,用于时间序列分类任务。pythonimport torchimport torch.nn as nnimport torch.nn.functional as Ffrom gmlp import SpatialGatingUnit, gMLPBlock, gMLP
class CNN(nn.Module): def init(self): # 初始化方法 super(CNN, self).init() # 初始化父类方法 # 第一层卷积层,输入为 (1,10000,12) self.conv1 = nn.Conv2d( # 二维卷积层 in_channels=1, # 输入通道数,对应时间序列的特征维度 out_channels=600, # 输出通道数,即卷积核数量 kernel_size=(200, 3), # 卷积核大小,(200,3)表示在时间维度上进行更大范围的特征提取 stride=(200, 3), # 卷积核移动步长,与kernel_size一致,实现不重叠的滑动窗口 )
self.gmlp = gMLP(d_model=600, d_ffn=1200, seq_len=200, num_layers=6) self.out = nn.Linear(600, 6) # 全连接层,输出6个类别
# 定义一个名为CNN的类,继承自PyTorch的nn.Module
def forward(self, x): # 前向传播方法 x = self.conv1(x) # 通过第一个卷积层 # 四维转三维 N, C, H, W = x.shape x = x.view(N, C, H * W).permute(0, 2, 1)
x = self.gmlp(x) x = x.mean(dim=1) feature = x output = self.out(x) # 通过全连接层得到输出 return feature, output # 返回特征和输出
模型解读
1. 输入: 模型接收形状为 (1, 10000, 12) 的三维张量作为输入,表示一个批次包含一个长度为10000,每个时间步具有12个特征的时间序列。
2. 卷积层(CNN): - conv1并非进行传统的图像卷积操作,而是利用卷积核在时间维度上滑动提取局部特征。 - kernel_size=(200, 3) 表示卷积核在时间维度上覆盖200个时间步,特征维度上覆盖所有12个特征。 - stride=(200, 3) 使得卷积核以不重叠的方式滑动,将时间序列分割成不重叠的片段。
3. 形状变换: - 经过卷积层后,数据形状变为四维。为了适应后续的gMLP模块,需要进行形状变换。 - view操作将四维张量转换为三维,合并了特征维度和时间维度。 - permute操作交换维度,将时间维度放在最后一维,符合gMLP的输入要求。
4. gMLP模块: - gMLP是一种基于门控机制的多层感知机,能够捕捉时间序列中的长距离依赖关系。 - 该模型使用6层gMLP块堆叠而成,每个块内部使用门控机制选择性地传递信息。
5. 全连接层和输出: - gMLP模块的输出经过全局平均池化,将时间维度压缩。 - 最后,一个全连接层将特征映射到6个类别,得到最终的分类结果。
总结
该模型结合了CNN的局部特征提取能力和gMLP的全局信息捕捉能力,能够有效地处理时间序列数据,并取得良好的分类效果。其中,卷积层的设计巧妙地将时间序列分割成不重叠的片段,方便后续模块进行处理。
原文地址: https://www.cveoy.top/t/topic/2uF 著作权归作者所有。请勿转载和采集!