当阳网站建设电话合肥建设银行网站首页
一、算法原理
1.1 CNN原理
卷积神经网络具有局部连接、权值共享和空间相关等特性。卷积神经网络结构包含卷积层、激活层和池化层。
(a)二维卷积层将滑动卷积滤波器应用于输入。该层通过沿输入垂直和水平方向 移动滤波器对输入进行卷积,并计算权重与输入的点积,然后加入一个偏置项。具体表达式为:

卷积层的功能是对输入数据进行特征提取。其内部包含多个卷积核,也称为 感受野。将输入图像和卷积核做卷积运算,可以增强原始信号特征的同时降低噪声。卷积运算的具体过程如图1所示。

图1 卷积运算的具体过程
(2)激活函数
在卷积神经网络中,常用的激活函数包括 Sigmoid 函数、Tanh 函数、Swish 函数和 Relu 函数。Relu 函数解决了 Sigmoid 函数和 Tanh 函数梯度消失的问题, 提高了模型收敛的速度,受到的广泛学者的欢迎。
(3)池化层
池化层又称为下采样层,池化层分为平均池化层和最大池化层。其中,最大池化层通过将输入分为矩形池化区域,并计算每个区域的最大值来执行下采样, 而平均池化层则是计算池化区域的平均值来执行下采样。池化层的池化过程如图2所示。

图2 池化过程示意图
1.2 LSTM原理
LSTM采用循环神经网络( Recurrent Neural Network,RNN )架构[8],它是专门为从序列中学习长期依赖关系而设计的。LSTM可以使用4个组件:输入门、输出门、遗忘门和具有自循环连接的单元来移除或添加块状态的信息。其神经元结构如图3所示。

图3 LSTM网络结构
设输入序列共有 k 个时间步,LSTM 门控机制 结构为遗忘门、输入门和输出门,xt携带网络输入值 作为向量引入系统,ht 通过隐含层对 LSTM 细胞进 行输出,ct携带着 LSTM 细胞状态进行运算。LSTM 运算规则如下:

计算后保留 ct与 ht,用于下一时间步的计算;最后一步计算完成后,将隐藏层向量 hk作为输出与本组序列对应的预测值对比,得出损失函数值,依据梯度下降算法,优化权重和偏置参数,以此训练出迭代次数范围内最精确的网络参数。
1.3 CNN-LSTM框架
以时序预测为例,本次分享的CNN-LSTM的框架如图4所示。

图4 CNN-LSTM框架
二、代码实战
clcclearload('Train.mat')load('Test.mat')% LSTM 层设置,参数设置inputSize = size(Train_xNorm{1},1); %数据输入x的特征维度outputSize = 1; %数据输出y的维度numhidden_units1=50;numhidden_units2= 20;numhidden_units3=100;%opts = trainingOptions('adam', ...'MaxEpochs',10, ...'GradientThreshold',1,...'ExecutionEnvironment','cpu',...'InitialLearnRate',0.001, ...'LearnRateSchedule','piecewise', ...'LearnRateDropPeriod',2, ... %2个epoch后学习率更新'LearnRateDropFactor',0.5, ...'Shuffle','once',... % 时间序列长度'SequenceLength',k,...'MiniBatchSize',24,...'Verbose',0);%% lstmlayers = [ ...sequenceInputLayer([inputSize,1,1],'name','input') %输入层设置sequenceFoldingLayer('name','fold')convolution2dLayer([2,1],10,'Stride',[1,1],'name','conv1')batchNormalizationLayer('name','batchnorm1')reluLayer('name','relu1')maxPooling2dLayer([1,3],'Stride',1,'Padding','same','name','maxpool')sequenceUnfoldingLayer('name','unfold')flattenLayer('name','flatten')lstmLayer(numhidden_units1,'Outputmode','sequence','name','hidden1')dropoutLayer(0.3,'name','dropout_1')lstmLayer(numhidden_units2,'Outputmode','last','name','hidden2')dropoutLayer(0.3,'name','drdiopout_2')fullyConnectedLayer(outputSize,'name','fullconnect') % 全连接层设置(影响输出维度)(cell层出来的输出层) %tanhLayer('name','softmax')regressionLayer('name','output')];lgraph = layerGraph(layers)lgraph = connectLayers(lgraph,'fold/miniBatchSize','unfold/miniBatchSize');plot(lgraph)%% 网络训练ticnet = trainNetwork(Train_xNorm,Train_yNorm,lgraph,opts);%% 测试figurePredict_Ynorm = net.predict(Test_xNorm);Predict_Y = mapminmax('reverse',Predict_Ynorm',yopt);Predict_Y = Predict_Y';plot(Predict_Y,'g-')hold onplot(Test_y);legend('预测值','实际值')
实验结果:

部分知识来源于网络,如有侵权请联系作者删除~
今天的分享就到这里了,后续想了解智能算法、机器学习、深度学习和信号处理相关理论的可以后台私信哦~希望大家多多转发点赞加收藏,你们的支持就是我源源不断的创作动力!
作 者 | 华 夏
编 辑 | 华 夏
校 对 | 华 夏
