社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

传感器数据的深度学习模型应用(三) —— 一维时间卷积网络

MATLAB • 4 月前 • 92 次点击  

一维卷积是对一维输入数据应用滑动卷积来学习特征,其主要作用是对序列数据做局部特征提取。基于提取的特征可以进一步构建分类或回归网络。一维卷积的操作涉及卷积大小、步长以及填充形式和填充值。本文对一维卷积操作进行介绍,包括一维扩展卷积和一维因果卷积,以及 MATLAB 对一维卷积的支持情况。在最后通过一个实例演示如何在 MATLAB 中将一维卷积和 LSTM 结合构建分类网络,实现基于传感器数据的故障诊断。
由于篇幅所限,文章中不能展示全部过程的 MATLAB 代码,如果读者想要测试运行代码,可以扫码后通过提供的链接进行下载。
获取代码
    ◆  

1. 一维卷积

一维卷积操作过程如图1所示。图1中显示的卷积核的大小为 3(1×3的向量),滑动的步长(stride)为 2,采用 0 值填充(padding),填充可以在序列的最左侧,或者两侧填充,这需要根据具体需求决定。
图1 .一维卷积基本操作
基本的一维卷积操作过程中,卷积核的中心位置对齐输入序列的每个位置,卷积核沿着输入序列滑动,并在输入序列的每个位置计算加权和(步长等于 1)。默认设置下,卷积操作会在输入序列的两端进行填充(padding),输出结果的长度可以由以下公式计算:


其中:l 表示输出序列长度,i 表示输入序列长度;p 表示填充数据的总长度;f 表示卷积核长度;s 表示步长;floor 表示计算结果的下取整。

2. 一维因果卷积

因果卷积是一类特殊的一维卷积。基本的卷积操作会考虑输入位置的上下文信息,其不仅考虑位置之前的数据,还要考虑之后的数据。而因果卷积在处理输入序列的每个位置时,只依赖于当前及之前的位置信息,这在应对时间序列输入时,避免了信息泄露,即未来的信息不回影响过去的数据。因果卷积的卷积核最右侧位置对齐输入序列的开始位置,并根据步长滑动卷积核,因此输入序列通常会在开始部分进行填充。
图2 一维因果卷积操作过程
在实际应用中,一维卷积往往面对的是多个传感器输入序列,即多通道(每个通道对应一个传感器序列)输入,卷积核自身带有“厚度”,同时与所有通道上的数据做卷积后输出结果,因而一个卷积核合并多个通道的数据形成一个局部特征数据,如图3所示。
图3 一维多通道卷积

3. MATLAB 中的一维卷积

MATLAB 提供了一维卷积层 convolution1dLayer 实现对输入序列的卷积操作。其有多个属性用来设置卷积操作的过程,例如 FilterSize 用于定义卷积核的大小,NumFilters 定义卷积核的数量(卷积输出的通道数), Stride定义步长,等等。

convolution1dLayer 的属性 Padding 有两个值:samecausalsame 实现了一维卷积标准操作,在输入序列的两侧做填充,输出序列的长度等于ceil(输入序列长度/Stride),ceil是MATLAB的内置上取整函数。causal 实现因果卷积,只在输入序列左侧做填充。对于时间序列数据,causal 只关注当前位置即之前位置上的数据。
MATLAB 的 convolution1dLayer 也支持扩张卷积。扩展卷积(也称为空洞卷积,Dilated Convolution)是一种卷积操作,旨在增加卷积核的感受野,而不增加计算复杂度。通过在卷积核元素之间插入空洞(即零),扩展卷积可以在不增加参数数量的情况下捕获更大范围的输入信息。MATLAB 通过 convolution1dLayer 的属性 DilationFactor (膨胀系数)设置扩张卷积(也称空洞卷积),其数值的大小决定了卷积核元素之间空洞的大小。当 DilationFactor 的值为 1 时,卷积核元素之间不插入任何零值,与普通卷积相同。DilationFactor 值为 2 表示在卷积核元素之间插入 1 个零,为 3 表示插入 2 个零,依此类推。扩张卷积通过插入 0 值的方式扩大感受野,而参数数量并没有增加,进而可以提高计算效率。
针对时间序列数据,扩展卷积因果卷积配合使用构建时间卷积网络 (Temporal Convolutional Network, TCN)。在MATLAB中,通过设置 convolution1dLayer Padding 属性值为 causal,同时设置 DilationFactor 的值可以构建时间卷积网络。而此时对输入序列做左侧填充的大小为:(FilterSize - 1) .* DilationFactor。扩展卷积操作扩大了卷积层的输出位置的感受野,随着卷积层的增加,输出位置的感受野不断扩大。图4显示了在不增加参数数量(卷积核大小)的情况下,扩展卷积的膨胀系数(DilationFactor)呈指数增加,每个输出位置的感受野不断扩大。这使得网络能够捕获更大范围的局部信息。
图4 时间卷积网络的输出位置的感受野

4. 实现基于传感器数据的故障诊断

卷积网络的计算比循环网络更快,因为卷积操作可以通过单一运算来处理输入。相反,循环操作必须对输入的时间步进行迭代,进而其计算比较耗时。然而,循环网络时间步迭代使其能够捕获数据在时间上的依赖关系,可以学习到时间步之间的长期相关性,而卷积操作只是提取数据在局部的特征,并没有考虑时间上的关系。对于动态系统,往往存在着时间步之间的关系,识别这些关系对于诊断故障和预测寿命是非常重要的。因此,将一维卷积和循环网络联合使用。通过卷积提取输入序列的局部特征,减少序列长度,降低计算量;再通过循环网络捕获输入序列时间上的依赖关系,提高网络精度。这种结合在减少计算量的同时,也可以保证模型的精度。
本文将卷积网络和循环网络联合使用构建分类模型,实现基于传感器数据的故障诊断。利用上文提到的时间卷积网络提取输入数据的局部特征,并将由这些局部特征组成的新的序列数据输入 LSTM 网络捕获时间上的依赖关系,最后通过全连接网路输出故障类型,网络结构如图 5 所示。

图5 TCN+LSTM的分类网络
图 5 显示的是使用 Deep Network Designer App 构建分类网络,其中一维卷积层 convolution1dLayer 采用扩展卷积核因果卷积。通过逐层增加 DilationFactor 的值来扩大感受野;并且每个卷积层的 Padding 参数都设置为 causal。lstmLayer 的隐藏单元向量维度设置为 64,outputMode 设置为 sequence,因此,lstmLayer 层的输出是一个隐藏状态向量序列,并且序列中的每个向量的维度为 64。在 lstmLayer 之后使用 globalMaxPooling1dLayer 层对输出结果在时间方向上做最大值池化,进而其输出结果为一个 64 维的向量。最后我们使用两个全连接层做线性变化,最终输出为 3 维的向量对应于故障种类。
使用在传感器数据的深度学习模型应用(一) – Transformer提到的数据集,该数据集,并直接在原始信号数据上做模型训练。原始信号数据是具有 146484 采样点一维数据。数据集进步划分为训练集和测试集,如下所示:
训练集(上)和测试集(下)
进一步将训练集再划分为训练集和验证集,并在模型训练过程中进行验证,以提高模型的泛化能力。
训练集(上)和验证集(下)
模型训练过程,MATLAB 提供了超参数选项实现模型的进一步调优,而超参数选项是通过 trainingOptions 函数设置的,包括初始学习速率、学习速率衰减策略、minibatch 大小、训练执行环境(GPU、CPU)、训练周期等等。经过 100 个 Epoch 训练后,模型的精度以及在测试集上的测试结果如图 6 所示:
图6 模型训结果(上)和测试集精度(heatmap)(下)

5. 总结

本文通过引入一维卷积对原始传感器数据进行直接处理,实现了模型训练过程的特征提取,节省了数据前处理中的特征提取工作。在卷积层提取的特征数据上应用LSTM层捕获数据的动态特征。这种网络结构充分发挥了各自网络层特点,进而实现基于动态数据的故障诊断。本文目的是为读者在序列数据分析方面提供一种思路,所使用的代码可以通过下方二维码扫码下载。文中的模型设计和训练还有可以优化地方,仅为读者提供参考,也欢迎大家做进一步模型结构调整和精度提升。
扫码获取代码
    ◆  
阅读上期文章:
传感器数据的深度学习模型应用(一)—— Transformer 模型

传感器数据的深度学习模型应用(二)—— LSTM

    ◆  


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/179736
 
92 次点击