社区
教程
Wiki
注册
登录
创作新主题
社区所有版块导航
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
反馈
公告
社区推广
产品
短视频
印度
印度
一周十大热门主题
10年顽疾ChatGPT一眼识破!AlphaGo时刻震撼全球医疗界
多邻国联姻瑞幸;if椰子水母企IPO市值冲上100亿;阿里巴巴美国站推B2B先买后付 | TopDi...
西南交通大学张云辉团队JH|利用无监督机器学习和正定矩阵因子分解模型驱动煤矿农业区域的地下水化学成因...
Altman嘲讽小扎挖走的都不是顶尖人才!OpenAI高管再营业曝内幕:ChatGPT爆红后,我火速...
ChatGPT惨败Llama!MIT官宣AI开飞船0%失败率,马斯克火星殖民不再是梦
时代命题下的民营科技担当:从备份战略看Gitee的国家定位
Python到底要怎么学?这份6个月上岸攻略,已经帮800+小白成功转行
ChatGPT 4o 国内直接用!
ChatGPT诞生内幕大曝光!发布前一晚还在纠结
7月27日开考!人社部能建中心《生成式人工智能(AIGC)技术应用》职业培训
关注
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
有两个值:
same
和
causal
。
same
实现了一维卷积标准操作,在输入序列的两侧做填充,输出序列的长度等于
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 次点击
登录后回复