DBN+LSTM神经网络电容量回归分析,基于MATLAB编程的深度信念网络+lstm回归分析,

news/2024/6/18 3:10:38 标签: 神经网络, lstm, 回归, 深度学习, matlab

目录

背影
DBN神经网络的原理
DBN神经网络的定义
受限玻尔兹曼机(RBM)
LSTM长短期神经网络的原理
DBN+LSTM的时间序列电容预测
基本结构
主要参数
MATALB代码
结果图
展望

背影

DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,本文用DBN提取特征,用SVM分类,实现二者长处互补

DBN神经网络的的原理

在这里插入图片描述

深度信念神经网络DBN的定义

深度信念网络,DBN,Deep Belief Nets,神经网络的一种。既可以用于非监督学习,类似于一个自编码机;也可以用于监督学习,作为分类器来使用。

从非监督学习来讲,其目的是尽可能地保留原始特征的特点,同时降低特征的维度。从监督学习来讲,其目的在于使得分类错误率尽可能地小。而不论是监督学习还是非监督学习,DBN的本质都是Feature Learning的过程,即如何得到更好的特征表达。

作为神经网络,神经元自然是其必不可少的组成部分。DBN由若干层神经元构成,组成元件是受限玻尔兹曼机(RBM)。

受限玻尔兹曼机(RBM)

RBM是一种神经感知器,由一个显层和一个隐层构成,显层与隐层的神经元之间为双向全连接,在RBM中,任意两个相连的神经元之间有一个权值w表示其连接强度,每个神经元自身有一个偏置系数b(对显层神经元)和c(对隐层神经元)来表示其自身权重。
这样,就可以用下面函数表示一个RBM的能量:
在这里插入图片描述

在一个RBM中,隐层神经元 被激活的概率:

p(v/h) = sum(p(vi/h))

由于是双向连接,显层神经元同样能被隐层神经元激活:

在这里插入图片描述

其中, 为 Sigmoid 函数,也可以设定为其他函数。
值得注意的是,当 为线性函数时,DBN和PCA(主成分分析)是等价的。
同一层神经元之间具有独立性,所以概率密度亦然满足独立性,故得到下式:

lstm_48">lstm的详细原理

LSTM的定义

支持向量机(support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;SVM还包括核技巧,这使它成为实质上的非线性分类器。SVM的的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。SVM的的学习算法就是求解凸二次规划的最优化算法。
(1)支持向量机(Support Vector Machine, SVM)是一种对数据进行二分类的广义线性分类器,其分类边界是对学习样本求解的最大间隔超平面。

(2)SVM使用铰链损失函数计算经验风险并在求解系统中加入了正则化项以优化结构风险,是一个具有稀疏性和稳健性的分类器 。

(3)SVM可以通过引入核函数进行非线性分类。

LSTM理论


lstm的步骤

1 , LSTM的第一步是确定我们将从单元状态中丢弃哪些信息,这个策略有一个被称为遗忘门的sigmoid层决定。输入ht-1和xt遗忘门对应单元状态ct-1中每个数输出一个0到1之间的数字。1代表“完全保持”,0表示“完全遗忘”。

让那个我们回到我们的语言模型例子中尝试基于所有之前的词预测下一个词是什么。在这个问题中,单元状态中可能包括当前主题的性别,因此可以预测正确代词。当我们看到一个新的主题的性别时,我们想要忘记旧主题的性别。

=(W*[h-1,x]+b)

下一步将决定我们在单元状态中保存那些新信息。包括两个部分;第一”输入门层”的sigmoid层决定我们将更新那些值,第二,tanh层创建可以添加到状态的新候选值ct-1的向量。在下一步中,我们将结合这两个来创建状态更新。

在我们语言模型的例子中,我们想要将新主题的性别添加到单元格状态,以替换我们忘记的旧主题

=(W*[h-1,x]+b)

=tanh(W*[h-1,x]+b)

现在是时候将旧的单元状态ct-1更新为新的单元状态ct,之前的步骤已经决定要做什么,我们只需要实际做到这一点。我们将旧状态乘以ft,忘记我们之前决定忘记的事情,然后我们添加*Ct .这是新的候选值,根据我们的决定更新每个州的值来缩放。

在语言模型的情况下,我们实际上放弃了关于旧主题的性别的信息并添加新信息,正如我们在前面的步骤中所做的那样。

C=C-1+(1-)

最后,我们需要决定我们要输出的内容,此输出将基于我们的单元状态,但将是过滤版本,首先,我们运行一个sigmoid层,它决定我们要输出的单元状态的哪些部分,然后我们将单元状态设置为tanh(将值推到介于-1和1之间)并将其乘以sigmoid门的输出,以便我们只输出我们决定的部分。

对于语言模型示例,由于它只是看到一个主题,他可能想要输出与动物相关的信息,以防接下来会发生什么,例如,他输出主语是单数还是复数,一边我们知道动词应该与什么形式供轭。

O=(W[h-1,x]+b)

h=O*tanh©

lstm_96">基于dbn+ lstm回归分析

基本模型

创建经典的三层的DBN神经网络提取特征,LSTM回归分析

神经网络参数

maxepoch=1000;%训练rbm的次数
numhid=130; numpen=200; numpen2=10;%dbn隐含层的节点数
disp(‘构建一个3层的深度置信网络DBN用于特征提取’);

MATLAB编程代码

%% 本程序用于煤炭产能预测,所属回归预测类
clc
clear
close all
format compact
%% 加载数据
load maydataeemd.mat
inpu=num(:,1:25)‘;%输入
outpu = num(:,26)’;
%% 归一化
[input,inputps]=mapminmax(inpu,0,1);
[output,outputns]=mapminmax(outpu,0,1);
input=input’;
output=output’;
%% 划分数据集
%打乱样本 随机抽取300组作为训练样本,剩下130组作为测试样本
n = randperm(164);
n = 1:164;
P=input(n(1:164)😅; %训练输入
T=output(n(1:164)😅;
% P_test=input(n(130:160)😅;%测试输入
% T_test=output(n(130:160)😅;
clear data m n input output
%% 训练样本构造,分块,批量
numcases=41;%每块数据集的样本个数
numdims=size(P,2);%单个样本的大小
numbatches=4;%将69组训练样本,分成3批,每一批5组
% 训练数据
for i=1:numbatches
train=P((i-1)numcases+1:inumcases,:);
batchdata(:,:,i)=train;
end%将分好的10组数据都放在batchdata中

%% 2.训练RBM
%% rbm参数
maxepoch=500;%训练rbm的次数
numhid=180; numpen=180; numpen2=20;%dbn隐含层的节点数
disp(‘构建一个3层的深度置信网络DBN用于特征提取’);
%% 无监督预训练
fprintf(1,'Pretraining Layer 1 with RBM: %d-%d ',numdims,numhid);
restart=1;
rbm1;%使用cd-k训练rbm,注意此rbm的可视层不是二值的,而隐含层是二值的
vishid1=vishid;hidrecbiases=hidbiases;

fprintf(1,'\nPretraining Layer 2 with RBM: %d-%d ',numhid,numpen);
batchdata=batchposhidprobs;%将第一个RBM的隐含层的输出作为第二个RBM 的输入
numhid=numpen;%将numpen的值赋给numhid,作为第二个rbm隐含层的节点数
restart=1;
rbm1;
hidpen=vishid; penrecbiases=hidbiases; hidgenbiases=visbiases;

fprintf(1,'\nPretraining Layer 3 with RBM: %d-%d\n ',numpen,numpen2);%200-100
batchdata=batchposhidprobs;%显然,将第二哥RBM的输出作为第三个RBM的输入
numhid=numpen2;%第三个隐含层的节点数
restart=1;
rbm1;
hidpen2=vishid; penrecbiases2=hidbiases; hidgenbiases2=visbiases;
%%%% 将预训练好的RBM用于初始化DBN权重%%%%%%%%%
w1=[vishid1; hidrecbiases]; %
w2=[hidpen; penrecbiases]; %
w3=[hidpen2; penrecbiases2];%

%% 有监督回归层训练
%=训练过程===========%
%DBN无监督用于提取特征,需要加上有监督的回归========%
%由于含有偏执,所以实际数据应该包含一列全为1的数,即w0x0+w1x1+…+wnxn 其中x0为1的向量 w0为偏置b
N1 = size(P,1);
digitdata = [P ones(N1,1)];
w1probs = 1./(1 + exp(-digitdataw1));
w1probs = [w1probs ones(N1,1)];
w2probs = 1./(1 + exp(-w1probs
w2));
w2probs = [w1probs ones(N1,1)];
w3probs = 1./(1 + exp(-w2probs*w1));
num1 = w3probs’;

lstmout=funlstm(num1’,num);

[svmout,test] = svmfun(num1’,num);
figure
plot(lstmout,‘b-^’)
hold on
plot(svmout,‘r-o’)
hold on
plot(test,‘k-*’)
hold off
title(‘实际输出与理想输出的结果对照’);
xlabel(‘电容’)
ylabel(‘样本’)
legend(‘DNB-lstm-eemd输出电容’,‘DNB-svm-eemd输出电容’,‘实际电容’)

figure
plot(lstmout,‘b-’)
hold on
plot(svmout,‘r-’)
hold on

plot(test,‘k-’)
hold off
title(‘实际输出与理想输出的结果对照’);
xlabel(‘电容’)
ylabel(‘样本’)
legend(‘DNB-lstm-eemd输出电容’,‘DNB-svm-eemd输出电容’,‘实际电容’)

效果图

在这里插入图片描述

结果分析

从效果图上看,深度信念网络DBN+SLTM神经网络,DBN可以进行无监督特征提取,LSTM擅长学习时间序列,二者结合实现时间序列的电容预测

展望

DBN是一种深度信念网络,优点在可以处理大输入数据,能训练中自动降维,训练的过程就是降维的过程,缺点是拟合逼近能力不强,收敛面比较平滑,基于这些,可以和其他拟合能力强的神经网络结合,比如极限学习机,RBF等,结合后的神经网络,即可处理大输入数据,又具有无限逼近的能力,有需要扩展的欢迎扫描文章下面的二维码


http://www.niftyadmin.cn/n/174806.html

相关文章

四周年创作纪念日

前言 机缘 四年前我面临即将失业(毕业)的人生重大转折点也是我与小C相识的一年,初入C站只想着记录一下学习笔记也没什么目标,久而久之养成了习惯,大学生活逐渐接近尾声,那时候心里想着每个月工资能有一份四…

【LeetCode】剑指 Offer 33. 二叉搜索树的后序遍历序列 p179 -- Java Version

题目链接:https://leetcode.cn/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/ 1. 题目介绍(33. 二叉搜索树的后序遍历序列) 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true&am…

C++模板方法

设计模式&#xff1a;模板方法 #include <iostream>class Abstract_Sport { public:void template_method() {start();end();start();end();}virtual void start() 0;virtual void end() 0; };class Concrete_BasketBall : public Abstract_Sport {void start() {std:…

【BootstrapVue】滑动监听Scrollspy实现餐厅餐品展示

一、介绍效果图&#xff1a;介绍&#xff1a;根据滚动位置自动更新引导导航或列表组组件&#xff0c;以指示视口中当前处于活动状态的链接。作用&#xff1a;可以用于餐厅点菜的菜品展示页侧边栏、博客系统的侧边栏等&#xff0c;实现流畅的垂直滚动监听官方网址&#xff1a;Sc…

CentOS 8 (TencentOS3.1)安装xtrabackup 2.4

去官网下载rpm包 https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.27/binary/redhat/8/x86_64/percona-xtrabackup-24-2.4.27-1.el8.x86_64.rpmzhttps://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup…

uni-app 打包h5 踩坑

坑1 在我直接点击上图所示编译打包时&#xff0c;报我当前的手机账号需要验证 我百度了下 说是hbuildx版本太低&#xff0c;我升级之后还是不行。 其实就乖乖根据提示去官网认证一下手机号就好了 坑2 打包出来的文件访问时是个空页面 这是因为没有在h5配置相对路径 坑踩了 记录…

功能测试转型测试开发年薪27W,又一名功能测试摆脱点点点,进了大厂

咱们直接开门见山&#xff0c;没错我的粉丝向我投来了喜报&#xff0c;从功能测试转型测试开发&#xff0c;进入大厂&#xff0c;摆脱最初级的点点点功能测试&#xff0c;拿到高薪&#xff0c;遗憾的是&#xff0c;这名粉丝因为个人原因没有经过指导就去面试了&#xff0c;否则…

【Python入门第三十六天】Python丨文件写入

写入已有文件 如需写入已有的文件&#xff0c;必须向 open() 函数添加参数。 “a” - 追加 - 会追加到文件的末尾“w” - 写入 - 会覆盖任何已有的内容 实例 打开文件 “demofile2.txt” 并将内容追加到文件中&#xff1a; f open("demofile2.txt", "a&qu…