BP神经网络代码超通俗解释(MATLAB)

clc;clear;
%BP神经网络
xy=rand(2,200);
%随机生成200组自变量,一组变量包含x,y,可以看成第一行为x1,x2,...x200,第二行为y1,y2,...y200; 
z=xy(1,:).*xy(2,:);
%这个相当于为z=xy,实际情况一般无函数关系表达式,仅为1*200数组(对于这里)
input_train=xy(:,1:150);%神经网络输入层,训练数据
output_train=z(1:150);%神经网络输出层,训练数据
input_test=xy(:,151:end);%测试数据
output_test=z(151:end);%测试数据
%将前150组数据xyz作为训练数据,训练出最佳的权重,找到xy与z的关系
%为了验证我们训练效果,将后50组作为测试数据,查看与实际z值的误差
%实际问题中,一般将已知数据全做为训练数据
[input,ip]=mapminmax(input_train,0,1);
[output,op]=mapminmax(output_train,0,1);
%对于机器学习这些原始数据,都要进行归一化
%input和output为归一化的数据,ip和op为它们归一化处理规则
inputn_test=mapminmax('apply',input_test,ip);
%将训练数据相同的归一化处理规则给测试数据,即用到"apply"
net=newff(input,output,8);
%构建BP神经网络,8为隐藏层神经元个数,本神经网络隐藏层1层(一个隐藏层,8个神经元)
net.trainParam.epochs=1000;
%训练次数,即总迭代次数,为了防止一直达不到预期(目标)误差程序不停止
% 过小导致未找到最佳权重,输出值与实际值误差过大,过大导致训练时间过长
net.trainParam.lr=0.01;
%学习速率,即控制误差的步长,影响误差收敛速度
net.trainParam.goal=0.000001;
%训练的目标误差,即误差小于此值时退出
net=train(net,input,output);
%训练浅层神经网络,可命令行输入"doc train"查看使用规则
an=sim(net,input_test);
%对训练好的模型net 进行仿真;sim(model,vaule),class(net)为model
test_simu=mapminmax("reverse",an,op);
%对测试数据输出值反归一化,映射成原始值,op为之前的归一化处理规则
error=test_simu-output_test;
%查看测试数据输出值与对应真实值的误差
figure(1),plot(output_test,"*");hold on
plot(test_simu,"+");hold on 
plot(error);legend
%生成一个图窗,hold on反正前面的曲线被覆盖,
% 将测试数据在神经网络的输出值与实际值放到同一图中,可视化比较误差
plot(error);legend("期望值","神经网络输出值","误差");
%legend给3条曲线加图例,注释
len=length(output_test);
MAE=sum(abs(error./output_test))/len%计算平均绝对误差MAE,公式网上可查
MSE=error*error'/len%计算均方误差MSE
RMSE=MSE^(1/2)%计算均方跟误差RMSE

运行结果:

BP神经网络代码超通俗解释(MATLAB)_第1张图片

你可能感兴趣的:(matlab,神经网络,开发语言)