基于cnn-lstm的交通流量预测

目录
背影
卷积神经网络CNN的原理
卷积神经网络CNN的定义
卷积神经网络CNN的结构
CNN-LSTM结构
卷积神经网络CNN-LSTM交通流量预测
基本结构
主要参数
MATALB代码
结果图
展望

背影

现在生活,为节能减排,减少电能损耗,高压智能输电网是电网发展的趋势,本文基于卷积神经网络输电线路三相故障识别。

卷积神经网络CNN的原理

卷积神经网络CNN的定义

在这里插入图片描述

卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Networks),是深度学习(deep learning)的代表算法之一 。卷积神经网络具有表征学习(representation learning)能力,能够按其阶层结构对输入信息进行平移不变分类(shift-invariant classification),因此也被称为“平移不变人工神经网络(Shift-Invariant Artificial Neural Networks, SIANN)”

卷积神经网络CNN的基本结构

基本BP算法包括信号的前向传播和误差的反向传播两个过程。即计算误差输出时按从输入到输出的方向进行,而调整权值和阈值则从输出到输入的方向进行。正向传播时,输入信号通过隐含层作用于输出节点,经过非线性变换,产生输出信号,若实际输出与期望输出不相符,则转入误差的反向传播过程。误差反传是将输出误差通过隐含层向输入层逐层反传,并将误差分摊给各层所有单元,以从各层获得的误差信号作为调整各单元权值的依据。通过调整输入节点与隐层节点的联接强度和隐层节点与输出节点的联接强度以及阈值,使误差沿梯度方向下降,经过反复学习训练,确定与最小误差相对应的网络参数(权值和阈值),训练即告停止。此时经过训练的神经网络即能对类似样本的输入信息,自行处理输出误差最小的经过非线形转换的信息。

输入层

卷积神经网络的输入层可以处理多维数据,常见地,一维卷积神经网络的输入层接收一维或二维数组,其中一维数组通常为时间或频谱采样;二维数组可能包含多个通道;二维卷积神经网络的输入层接收二维或三维数组;三维卷积神经网络的输入层接收四维数组 。由于卷积神经网络在计算机视觉领域应用较广,因此许多研究在介绍其结构时预先假设了三维输入数据,即平面上的二维像素点和RGB通道。
与其它神经网络算法类似,由于使用梯度下降算法进行学习,卷积神经网络的输入特征需要进行标准化处理。具体地,在将学习数据输入卷积神经网络前,需在通道或时间/频率维对输入数据进行归一化,若输入数据为像素,也可将分布于 的原始像素值归一化至 区间 。输入特征的标准化有利于提升卷积神经网络的学习效率和表现。

隐含层

卷积神经网络的隐含层包含卷积层、池化层和全连接层3类常见构筑,在一些更为现代的算法中可能有Inception模块、残差块(residual block)等复杂构筑。在常见构筑中,卷积层和池化层为卷积神经网络特有。卷积层中的卷积核包含权重系数,而池化层不包含权重系数,因此在文献中,池化层可能不被认为是独立的层。以LeNet-5为例,3类常见构筑在隐含层中的顺序通常为:输入-卷积层-池化层-全连接层-输出。

卷积层

卷积层的功能是对输入数据进行特征提取,其内部包含多个卷积核,组成卷积核的每个元素都对应一个权重系数和一个偏差量(bias vector),类似于一个前馈神经网络的神经元(neuron)。卷积层内每个神经元都与前一层中位置接近的区域的多个神经元相连,区域的大小取决于卷积核的大小,在文献中被称为“感受野(receptive field)”,其含义可类比视觉皮层细胞的感受野 。卷积核在工作时,会有规律地扫过输入特征,在感受野内对输入特征做矩阵元素乘法求和并叠加偏差量

池化层(pooling layer)
在卷积层进行特征提取后,输出的特征图会被传递至池化层进行特征选择和信息过滤。池化层包含预设定的池化函数,其功能是将特征图中单个点的结果替换为其相邻区域的特征图统计量。池化层选取池化区域与卷积核扫描特征图步骤相同,由池化大小、步长和填充控制

全连接层(fully-connected layer)
卷积神经网络中的全连接层等价于传统前馈神经网络中的隐含层。全连接层位于卷积神经网络隐含层的最后部分,并只向其它全连接层传递信号。特征图在全连接层中会失去空间拓扑结构,被展开为向量并通过激励函数

输出层
卷积神经网络中输出层的上游通常是全连接层,因此其结构和工作原理与传统前馈神经网络中的输出层相同。对于图像分类问题,输出层使用逻辑函数或归一化指数函数(softmax function)输出分类标签 。在物体识别(object detection)问题中,输出层可设计为输出物体的中心坐标、大小和分类 。在图像语义分割中,输出层直接输出每个像素的分类结果

基于卷积神经网络CNN-LSTM的交通流量预测

基本模型

创建经典的Lenet,三层CNN神经网络,然后把CNN的输出层改为LSTM的输入层,通过lstm的输出层最终输出数据,构建cnn-lstm模型

神经网络参数

卷积核33,池化层22,学习率0.5,训练批次10,最大迭代次数100,

数据

MATLAB编程代码

clear
clc
close all
% format compact
%% 加载数据
num = xlsread(‘更新-CNN-LSTM -DATA.xlsx’);%读取数据
%%
input1=num(:,1:24);%
input2 = [input1 input1(:,1:12)];
output2=num(:,25)‘;%16个好橘子,作为标签1,剩下的怀橘子对应标签2
%%
[input3,inpps] = mapminmax(input2’,-1,1);
input = input3’;
output = zeros(2,length(output2));

for i=1:size(input,1)
x=reshape(input(i,:),6,6);
input_x(:,:,i)=x;
output(output2(i),i) = 1;
end
%%
% save datan.mat n
n = randperm(size(num,1));
m = round(0.8length(num));
train_x=input_x(:,:,n(1:m));
train_y=output(:,n(1:m));
test_x=input_x(:,:,n(m+1:end));
test_y=output(:,n(m+1:end));
%% 创建一个经典Lenet(卷积神经网络中代表模型,如lenet、alexnet,vgg16,resnet等)
rand(‘state’,1)
cnn.layers = {
%第一层
struct(‘type’, ‘i’) %输入层
%第二层
struct(‘type’, ‘c’, ‘outputmaps’, 30, ‘kernelsize’, 3) %卷积层–相当于隐含层节点为10,每次采用一个3
3的卷积核进行抽样卷积
% 卷积后的图像大小为(4-3+1)(4-3+1)=22
struct(‘type’, ‘s’, ‘scale’, 2) %池化层 利用一个22的池化层把卷积后的图像降维原来的一半
% (2/2)
(2/2)=1*1
};
%% 训练 CNN
% 参数设置
opts.alpha = 1;% 学习率
opts.batchsize = 2; %批训练大小 batchsize整数倍必须是总训练样本大小,选择更小的批数据 这样计算的更快,电脑所需内存也会大幅减小
opts.numepochs = 60;%学习迭代次数

cnn = cnnsetup(cnn, train_x, train_y);
cnn = cnntrain(cnn, train_x, train_y, opts);
% % 训练误差曲线
figure
plot(cnn.rL)
xlabel(‘训练次数次数’)
ylabel(‘误差’)
title(‘训练误差曲线’)

%% 测试模型有效性
% load net_cnn
% 训练集
[er1, bad1 , a1, h1] = cnntest(cnn, train_x, train_y);

figure
plot(h1,‘ro’);hold on
plot(a1,‘k*’)
legend(‘预测输出’,‘期望输出’)
xlabel(‘样本’)
ylabel(‘流量’)
title(‘CNN网络输出与期望输出对比–训练集’)
% 测试集
[er2, bad2 , output_test, h2] = cnntest(cnn, test_x, test_y);
tp =0;
fn = 0;
fp = 0;
tn = 0;
for ii = 1:length(output_test)
if output_test(ii)==h2(ii)
if output_test(ii)==1%负负
tn = tn+1;
else
tp = tp+1;%正正
end
else
if output_test(ii)==1%负正
fp = fp+1;
else
fn = fn+1;%正负
end
end
end

acc = (tp+tn)./(tp+tn+fp+fn)
spec = tn/(tn+fp)
sens = tp/(tp+fn)
prec = (tp+tn)./(tp+tn+fp+fn)
f1 = 2precsens/(prec+sens)
%% 结果分析

% zz = plotroc(output_test,h2);
[tpr,fpr] = roc(output_test,h2);
tpr = [0 tpr 1];
fpr = [0 fpr 1];
auc = sum(diff(fpr,1).*(tpr(1:end-1)+tpr(2:end))/2)
[mat,kappa]=confusion_matrix1(output_test,h2);
set(gca,‘XTick’,1:2,…
‘XTickLabel’,{‘0’,‘1’},… %# and tick labels
‘YTick’,1:2,… %同上
‘YTickLabel’,{‘0’,‘1’},…
‘TickLength’,[0 0]);
title(‘CNN-LSTM预测标签与真实标签的混淆矩阵’);

figure
plot(h2,‘ro’);hold on
plot(output_test,‘k*’)
legend(‘预测输出’,‘期望输出’)
xlabel(‘样本数’)
ylabel(‘流量’)
title(‘CNN网络输出与期望输出对比–测试集’)

error2 = output_test- h2;
figure
plot(error2,‘k-*’)
ylabel(‘误差’)

zhunquelv = sum(output_test==h2)/length(h2)
[PX,PY,Auc] = calculate_roc(h2-1, output_test-1);

figure
plot(PX,PY,‘b-’)
hold on
plot([0 1],[0 1],‘k-’)

效果图

基于cnn-lstm的交通流量预测_第1张图片

结果分析

从效果图上看,CNN-LSTM的交通流量预测,可以基本预测出未来的交通数值

展望

CNN是一种深度信念网络,优点在可以处理大输入数据,能训练中自动降维,训练的过程就是降维的过程,LSTM神经网络在处理时间序列数据方面有独特的优势,对长短期的数据有单独的处理机制,二者结合预测时间序列的交通流量,准确率比一般神经网络更高,,有需要扩展的或者疑问欢迎扫描文章下面的二维码

你可能感兴趣的:(神经网络,cnn,lstm,深度学习,神经网络,matlab)