⛄一、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.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

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

  1. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

  2. 【图像去噪】基于matlab全变分算法图像去噪【含Matlab源码 626期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像去噪]基于matlab全变分算法图像去噪[含Matlab源码 626期] 获取代码方式2: 付费专栏Matlab图像处理(初级版) ...

  3. 【图像分割】基于matlab萤火虫算法图像分割【含Matlab源码 2136期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[图像分割]基于matlab萤火虫算法图像分割[含Matlab源码 2136期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2: ...

  4. 【Matlab图像加密】正交拉丁方置乱算法图像加解密【含GUI源码 182期】

    一.代码运行视频(哔哩哔哩) [Matlab图像加密]正交拉丁方置乱算法图像加解密[含GUI源码 182期] 二.matlab版本及参考文献 一.代码运行视频(哔哩哔哩) [Matlab图像处理]自动 ...

  5. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  6. 【Matlab人脸识别】BP神经网络人脸识别(含识别率)【含GUI源码 891期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]BP神经网络人脸识别(含识别率)[含GUI源码 891期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  7. 【Matlab人脸识别】形态学教室人数统计(带面板)【含GUI源码 1703期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]形态学教室人数统计(带面板)[含GUI源码 1703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟 ...

  8. 【Matlab人脸识别】人脸实时检测与跟踪【含GUI源码 673期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]人脸实时检测与跟踪[含GUI源码 673期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]孟逸凡,柳益君 ...

  9. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  10. 【Matlab身份证识别】身份证号码识别【含GUI源码 014期】

    一.代码运行视频(哔哩哔哩) [Matlab身份证识别]身份证号码识别[含GUI源码 014期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

最新文章

  1. 引用计数(Reference Counting)和代理(Proxy)的应用
  2. 查询各个分区的数据量_分库、分表、分区的区别,傻傻分不清?
  3. DAC MAC RBAC ABAC 权限系统的设计
  4. VB 6.0 计算鼠标的金额 字体
  5. EF Core3.0+ 通过拦截器实现读写分离与SQL日志记录
  6. 在同一台机器上启动多个JBoss A-MQ JVM
  7. 执行Plugins下的install:install报错:The packaging for this project did not assign a file to the build artif
  8. CV+医疗领域实践项目!适合入门的图像分类领域新赛事
  9. Docker入门之五数据管理
  10. Shell脚本中date的用法小结
  11. linux中可以使用-af含义,关于Windows中的linux:AF_UNIX
  12. 解决“访问 IIS 元数据库失败”的方法
  13. 富士通Fujitsu DPK1180K 打印机驱动
  14. 深度网络梯度爆炸的原因、产生的影响和解决方法(常用激活函数)
  15. Web开发者的实用网址
  16. spark输出rdd数据_Spark中RDD的详解
  17. 一文读懂开源项目 OpenHarmony2.0 开源项目 OpenHarmony 是什么
  18. 程序员的十个等级(最详尽)
  19. android悬浮按钮阴影,浅谈FloatingActionButton(悬浮按钮)
  20. CVPR2020目标检测方向论文

热门文章

  1. 互联网中常见的推荐算法合集
  2. 静态的使用---static
  3. 海思3518E开发笔记2.5——海思VI(video input)模块详解
  4. html body keydown,HTML DOM--gt;键盘事件:keydown/keyup/keypress
  5. java链接zookeeper
  6. 「PHP基础知识」使用数组保存数据
  7. c语言 switch循环语句,C语言入门(四)之switch、循环语句
  8. mysql左连接和内连接区别_MYSQL 左连接右连接和内连接的详解及区别
  9. 安装cuda 11 ,cudnn,pytorch 1.7
  10. 「智能服务中心+集团服务中台」:让每个企业享受智慧服务带来的改变 |百万人学AI评选