BP神经网络及其app设计

BP神经网络及其app设计

  • bp神经网络的基本原理和组成
  • app设计的基本思路
  • app设计及其代码实现

bp神经网络的基本原理和组成

bp神经网络的基本原理和组成:
神经网络的基本代码如下:具体的过程也比较简单为此在这里也就不多多赘述



%% 此程序matlab编程实现的BP神经网络
% 清空环境变量
clear all
clc

%%第一步 读取数据
input=randi([1 20],2,200);  %载入输入数据是1-202200列数据,随机数
output=input(1,:)'+input(2,:)';  %载入输出数据,输出的数据是2001列的数据,其结果是11列的的数据加上
%21列的输出的叠加,为两输入一输出

%% 第二步 设置训练数据和预测数据
input_train = input(:,1:190);%输入的数据是2190列的数据
output_train =output(1:190,:)';%输出的数据是1901列的数据
input_test = input(:,191:200);%测试的数据为2191-200列的数据
output_test =output(191:200,:)';%输出的数据为191-200列的数据

%节点个数
%inputnum=2;%输入的节点个数
hiddennum=5;%隐含层节点数量经验公式p=sqrt(m+n)+a ,故分别取2~13进行试验
%outputnum=1;%输出的节点个数

%% 第三步 训练样本数据归一化
[inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化
%归一化的原因是减少计算量和预测误差,由于在计算时,将输入是、输出的数据归一化了
%为此在结束时,需要将预测结果反归一化
[outputn,outputps]=mapminmax(output_train);
%% 第四步 构建BP神经网络

net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');
% 建立模型,传递函数使用purelin,采用梯度下降法训练

%W1= net. iw{1, 1};%输入层到中间层的权值
%B1 = net.b{1};%中间各层神经元阈值

%W2 = net.lw{2,1};%中间层到输出层的权值
%B2 = net. b{2};%输出层各神经元阈值
%可以通过上述代码查看权值和阈值
%% 第五步 网络参数配置( 训练次数,学习速率,训练目标最小误差等)
net.trainParam.epochs=1000;         % 训练次数,这里设置为1000次
net.trainParam.lr=0.01;             % 学习速率,这里设置为0.01
net.trainParam.goal=0.00001;        % 训练目标最小误差,这里设置为0.00001

%% 第六步 BP神经网络训练
net=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入输出样本

%% 第七步 测试样本归一化,测试的数据归一化
inputn_test=mapminmax('apply',input_test,inputps);% 对样本数据进行归一化

%% 第八步 BP神经网络预测
an=sim(net,inputn_test); %用训练好的模型进行仿真

%% 第九步 预测结果反归一化与误差计算     
test_simu=mapminmax('reverse',an,outputps); %把仿真得到的数据还原为原始的数量级
error=test_simu-output_test;      %预测值和真实值的误差

%%第十步 真实值与预测值误差比较
figure(1)
plot(output_test,'bo-')
hold on
plot(test_simu,'r*-')
hold on
plot(error,'square','MarkerFaceColor','b')
legend('期望值','预测值','误差')
xlabel('数据组数')
ylabel('值')
[c,l]=size(output_test);
MAE1=sum(abs(error))/l;
MSE1=error*error'/l;
RMSE1=MSE1^(1/2);
disp(['-----------------------误差计算--------------------------']);
disp(['隐含层节点数为: ',num2str(hiddennum),'时的误差结果如下:'])
disp(['平均绝对误差MAE为:',num2str(MAE1)])
disp(['均方误差MSE为: ',num2str(MSE1)])
disp(['均方根误差RMSE为: ',num2str(RMSE1)])

app设计的基本思路

app设计的基本思路:
接下来解释app的设计:其中主要的思想是通过,自定义隐含层、训练次数、学习速率、最小误差参数,然后按下计算按钮就可以生成结果图、以及误差统计数据。(也可以自己选择一些参数在这里仅使用这些参数作为自定义参数)

app设计及其代码实现

1.基本界面如下:
BP神经网络及其app设计_第1张图片
2.代码的实现:
下面展示一些 内联代码片

// A code block
var foo = 'bar';
%%%%%计算按钮的回调函数代码如下:
            input_data=xlsread('input_data.xlsx');%读取表格中的数据,输入值
            output_data=xlsread('output_data.xlsx');%读取表格中的数据,输出值(此时的表格中的数据需要放app运行的文件目录下才能读取)
            %%第一步 读取数据
            input_train = input_data(:,1:190);%输入的数据是2190列的数据
            output_train =output_data(1:190,:)';%输出的数据是1901列的数据
            input_test = input_data(:,191:200);%测试的数据为2191-200列的数据
            output_test =output_data(191:200,:)';%输出的数据为191-200列的数据
            %节点个数
            %inputnum=app.input.Value;%输入的节点个数
%%%%自定义隐含层数,并赋值给hiddennum
            hiddennum=app.middle.Value;%隐含层节点数量经验公式p=sqrt(m+n)+a ,故分别取2~13进行试验,代码的含义是通过
            %outputnum=app.output.Value;%输出的节点个数
            
            %% 第三步 训练样本数据归一化
            [inputn,inputps]=mapminmax(input_train);%归一化到[-1,1]之间,inputps用来作下一次同样的归一化
            %归一化的原因是减少计算量和预测误差,由于在计算时,将输入是、输出的数据归一化了
            %为此在结束时,需要将预测结果反归一化
            [outputn,outputps]=mapminmax(output_train);
            %% 第四步 构建BP神经网络
            
            net=newff(inputn,outputn,hiddennum,{'tansig','purelin'},'trainlm');
            % 建立模型,传递函数使用purelin,采用梯度下降法训练
            
            %W1= net. iw{1, 1};%输入层到中间层的权值
            %B1 = net.b{1};%中间各层神经元阈值
            
            
            %W2 = net.lw{2,1};%中间层到输出层的权值
            %B2 = net. b{2};%输出层各神经元阈值
            
            %% 第五步 网络参数配置( 训练次数,学习速率,训练目标最小误差等)
%%%%%自定义训练次数赋值给net.trainParam.epochs            
            net.trainParam.epochs=app.epochs.Value;         % 训练次数,这里设置为1000%%%%%自定义学习速率赋值给 net.trainParam.lr            
            net.trainParam.lr=app.lr.Value;             % 学习速率,这里设置为0.01
%%%%%自定义训练目标最小误差赋值给net.trainParam.goal            
            net.trainParam.goal=app.goal.Value;        % 训练目标最小误差,这里设置为0.00001
            
            %% 第六步 BP神经网络训练
            net=train(net,inputn,outputn);%开始训练,其中inputn,outputn分别为输入输出样本
            
            %% 第七步 测试样本归一化,测试的数据归一化
            inputn_test=mapminmax('apply',input_test,inputps);% 对样本数据进行归一化
            
            %% 第八步 BP神经网络预测
            an=sim(net,inputn_test); %用训练好的模型进行仿真
            
            %% 第九步 预测结果反归一化与误差计算
            test_simu=mapminmax('reverse',an,outputps); %把仿真得到的数据还原为原始的数量级
            error_num=test_simu-output_test;      %预测值和真实值的误差
            
            %%第十步 真实值与预测值误差比较
%%%%%绘制图形在app.UIAxes图形显示控件上
            plot(app.UIAxes,output_test,'bo-');
            hold (app.UIAxes,'on');
            plot(app.UIAxes,test_simu,'r*-');
            hold (app.UIAxes,'on');
            plot(app.UIAxes,error_num,'square','MarkerFaceColor','b');
            legend(app.UIAxes,'期望值','预测值','误差');
            [c,l]=size(output_test);
            RMSE=sum(abs(error_num))/l;
            MSE1=error_num*error_num'/l;
            RMSE1=MSE1^(1/2);
            rmse=string(RMSE);
            mse1=string(MSE1);
            rmse1=string(RMSE1);
%%%%%计算的统计值分别显示在三个文本中(需要强制转换成字符类型)如果使用数值直接赋值即可        
            app.EditField.Value=rmse;
            app.EditField_2.Value=mse1;
            app.EditField_3.Value=rmse1;

组件名如下:
BP神经网络及其app设计_第2张图片

3.运算结果:
BP神经网络及其app设计_第3张图片

基本的appdesigner,在我的上一篇博客里,如果有什么疑问的话也可以以留言。

你可能感兴趣的:(MATLAB,appdesigner,神经网络,matlab,app)