1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 如何调用MATLAB自带的BP神经网络工具箱

如何调用MATLAB自带的BP神经网络工具箱

时间:2021-01-01 15:33:24

相关推荐

如何调用MATLAB自带的BP神经网络工具箱

BP神经网络是非常经典且好用的一种学习数据内在规律的拟合-预测模型,具有很强的线性和非线性的映射能力.BP神经网络属于人工神经网络(Artificial Neural Network, ANN)的一种,BP是Back Propagation的缩写,意为反向传播.反向传播的本质为误差是向后传播,进而调整神经元的参数. 1943年McCulloch, W.S.和W. Pitts[1]最早提出了神经元的数学模型, 1974年Paul J. Werbos[2]正式提出了BP神经网络训练算法,到目前BP神经网络广泛用于各种预测和控制模型,已经有数十年的历史,取得了很好的效果.

本文的主旨不在于研究BP神经网络的历史和原理,主要着眼于其实际使用方法,下面我们先看调用MATLAB自带的BP神经网络工具箱的代码.

本代码总体流程:

(1)首先随机产生200组维度为2的输入数据X,对X的2维数据求和后加上随机噪声,得到输出数据Y;

(2)然后定义训练集和测试集,就是划分为两个无交集的子集,一个用于训练BP神经网络,一个用于测试BP神经网络;

(3)对数据进行归一化处理,BP神经网络要求对数据进行归一化处理,这样预测效果是最理想的;

(4)设置BP神经网络的参数

(5)训练BP神经网络,并输出训练误差曲线

(6)测试BP神经网络,并输出测试结果

%% 本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979

%% BP神经网络

clc;close all;clear all;warning off;%清除变量

rand('seed', 100);

randn('seed', 100);

format long g;

%%(1)首先随机产生200组维度为2的输入数据X,对X的2维数据求和后加上随机噪声,得到输出数据Y

X1=rand(2,200);

Y1=sum(X1)+5;

Y1=Y1.*(1+(-0.05+0.1*rand(size(Y1))));

%% (2)定义训练集和测试集,就是划分为两个无交集的子集,一个用于训练BP神经网络,一个用于测试BP神经网络;

n1=size(Y1,2);

I1=1:n1;%顺序样本

n2=20;%用于测试的样本个数

indextraindata=I1(1:end-n2);

indextestdata=I1(end-n2+1:end);

% 定义训练集

P1data=X1(:,indextraindata);

T1data=Y1(:,indextraindata);

% 定义测试集

P2data=X1(:,indextestdata);

T2data=Y1(:,indextestdata);

%% (3)对数据进行归一化处理

% 训练数据归一化

[input_traindata,inputps]=mapminmax(P1data);

[output_traindata,outputps]=mapminmax(T1data);

%测试数据归一化

input_testdata=mapminmax('apply',P2data,inputps);

%%(4)设置BP神经网络的参数

hidnumber=10;%设置隐含测节点数

net_new=newff(input_traindata,output_traindata,hidnumber);%新建BP神经网络net

% 设置神经网络的参数

net_new.trainparam.epochs=1000;%设置训练次数

net_new.trainparam.goal=0.000000001;% 设置目标精度

net_new.trainparam.lr=0.1;% 设置学习率

net_new.trainFcn='traingd';%设置训练函数梯度下降

net_new.divideFcn ='';

%% (5)训练BP神经网络,并输出训练误差曲线

[net_new,tr]=train(net_new,input_traindata,output_traindata);% 训练模型

msedata=tr.perf;% 训练误差

epochs201=tr.epoch;% 训练次数

%绘制训练误差曲线

figure;

semilogy(epochs201,msedata);

xlabel('训练次数','fontname','宋体');

ylabel('训练误差','fontname','宋体');

title('训练误差曲线','fontname','宋体');

%% (6)测试BP神经网络,并输出测试结果

input_traindata0=input_traindata(:,1:length(indextraindata));

ybptraindata=sim(net_new,input_traindata0);

ybptraindata=mapminmax('reverse',ybptraindata,outputps);%预测数据反归一化

ybptestdata=sim(net_new,input_testdata);

ybptestdata=mapminmax('reverse',ybptestdata,outputps);%预测数据反归一化

%% 输出结果

msedata=tr.perf;

disp('BP神经网络训练的RMSE');

sqrt(msedata(end))

disp('训练集样本编号');

indextraindata

disp('测试集样本编号');

indextestdata

disp('实际值');

T2data

disp('预测结果');

ybptestdata

figure;

plot(T2data,'bo-');

hold on;

plot(ybptestdata,'r*-');

legend({'实际值','BP预测值'},'fontname','宋体');

xlabel('','fontname','宋体');

ylabel('目标值','fontname','宋体');

title('预测结果','fontname','宋体');

figure;

plot(ybptestdata-T2data,'bo-');

legend({'绝对误差'},'fontname','宋体');

xlabel('','fontname','宋体');

ylabel('绝对误差','fontname','宋体');

title('绝对误差','fontname','宋体');

figure;

plot((ybptestdata-T2data)./T2data*100,'bo-');

legend({'相对误差'},'fontname','宋体');

xlabel('','fontname','宋体');

ylabel('相对误差(%)','fontname','宋体');

title('相对误差','fontname','宋体');

disp('本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979');

%% 本代码由华量信息技术工作室 代码顾问免费提供 联系方式 QQ1579325979

代码运行的结果如下:

有讨论的可以加我q :1579325979

参考文献:

[1]McCulloch, W.S. and W. Pitts,A logical calculus of the ideas immanent in nervous activity.The bulletin of mathematical biophysics, 1943.5(4): p. 115-133.

[2]Werbos, P.,Beyond Regression: New Tools for Prediction and Analysis in the Behavioral Science. Thesis (Ph. D.). Appl. Math. Harvard University. 1974.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。