【风速预测】基于matlab DBN算法风速预测【含Matlab源码 1400期】

628 阅读4分钟

一、DBN算法简介

DBN是深度学习方法中的一种常用模型,是一种融合了深度学习与特征学习的神经网络。DBN网络结构是由若干层受限玻尔兹曼机(Restricted Boltzmann Machine,RBM)和一层BP组成的一种深层神经网络。DBN结构如图2所示。 在这里插入图片描述 在这里插入图片描述 图2 DBN结构示意图 DBN训练过程由预训练和微调构成,数据首先由输入层输入到网络结构中,生成一个向量V,通过权重值W传给隐藏层得到H,单独无监督训练每一层RBM网络,确保特征向量映射到不同特征空间,最后由BP网络接收RBM的输出特征向量作为它的输入特征向量,反向传播网络自顶向下将错误信息传播给每一层RBM,微调整个DBN网络,进行有监督的训练,最终得到网络中的权重以及偏置。

1 受限玻尔兹曼机 RBM是1986年由Smolensky提出的一种可通过输入数据集学习概率分布的随机生成神经网络。RBM模型是包含一种可观察变量(v)和单层隐藏变量(h)的无向概率图,RBM只有两层神经元,它是一个二分图,两层间的单元相互连接,层内的任何单元之间不存在连接。RBM结构见图3。 在这里插入图片描述 图3 RBM结构示意图 RBM是一种基于能量的模型,任何两个连接的神经元之间都有一个权重W来表示连接权重Wij, Wij表示可观察变量单元i和隐藏变量单元j之间的权重,观察层与隐藏层分别用v和h来表示,则连接权重与偏差决定的观察层变量v和隐藏层变量h的联合配置能量如下: 在这里插入图片描述 其中ai是可观察层单元的偏置,bj是隐藏层单元的偏置,Wij为可观察层单元与隐藏层单元之间的连接权重,基于能量函数的可观察层和隐藏层可以得到概率分布: 在这里插入图片描述 其中Z为配分函数的归一化常数,即所有参数下的能量之和,该函数累加所有可观察向量和隐藏向量的可能组合。

RBM中的每层中的神经元只存在两种状态0或1,给定任意层中的各神经元的状态,可以得到可观察层神经元和隐藏层神经元的状态概率如下: 在这里插入图片描述 根据Hinton在2002年提出的对比散度,可知参数的变化规则如下: 在这里插入图片描述 其中,ε是学习率,⟨⋅⟩data表示训练原始数据集的模型定义的分布,⟨⋅⟩recon表示一步重构后模型定义的分布。

2 BP神经网络 BP神经网络是一种多层的前馈神经网络,其输出结果采用的是前向传播,误差采用反向传播方式进行的。BP神经网络是含有输入层、隐藏层和输出层的三层神经网络结构。具体如图4所示。

BP神经网络由上一层神经元连接到下一层神经元时可以接收到上一层神经元传递来的信息,并经过“激活”将接收到的值传递给下一层。对于误差的反向传播是从下一层神经元传递给上一层神经元,一次性调节隐含层到输出层的权重和偏置,输入层到隐含层的权重和偏置。 在这里插入图片描述 图4 BP神经网络结构图

二、部分源代码

clc;clear;format compact;close all;tic
rng('default')
%% 数据预处理
data=xlsread('215-风速数据.xls','B2706:B3449');
[x,y]=data_process(data,24);

%train dbn
dbn.sizes = [10 5];%设置两个RBM与隐含层节点
opts.numepochs =   100;%训练次数
opts.batchsize = 100;%batchsize
opts.momentum  =   0;%动量
opts.alpha     =   1;%学习率
opts.show =0;% 这个设置为1的话 命令行窗口要一直显示每一个迭代的误差,从而影响训练速度
dbn = dbnsetup(dbn, train_x, opts);
dbn = dbntrain(dbn, train_x, opts);

%unfold dbn to nn
nn = dbnunfoldtonn(dbn, 1);%将各训练好的RBM用于初始DBN
nn.activation_function = 'sigm';%隐含层激活函数
nn.output='linear';%回归预测的输出层用线性激活
nn.learningRate=0.1;%学习率
%train nn 微调
opts1.numepochs =  100;%训练次数
opts1.batchsize = 4;%batchsize
opts1.show =0;% 这个设置为1的话 命令行窗口要一直显示每一个迭代的误差,从而影响训练速度
nn = nntrain(nn, train_x, train_y, opts1);
figure
plot(nn.loss)
%% predict
[~,pred] = nnpredict(nn, test_x);
% 反归一化
predict_value=mapminmax('reverse',pred',mappingy);
true_value=mapminmax('reverse',test_y',mappingy);

三、运行结果

在这里插入图片描述 在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本 2014a

2 参考文献 [1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016. [2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017. [3]周品.MATLAB 神经网络设计与应用[M].清华大学出版社,2013. [4]陈明.MATLAB神经网络原理与实例精解[M].清华大学出版社,2013. [5]方清城.MATLAB R2016a神经网络设计与应用28个案例分析[M].清华大学出版社,2018.