BP神经网络学习--MATLAB源码详细注释

学习BP神经网络,推荐先了解其中的数学原理:传送门————》

我是从0基础开始看MATLAB代码的,源码从《MATLAB神经网络43个案例分析》中获取,相对来说讲解得很清楚了,但是对于一穷二白的我来说还是一个很大的挑战,我已经尽己所能很认真地加了很多注释并且已经运行成功了,现在把源码贴出来:

如果我没有加注释的说明是很简单的了,只要百度一下就可以知道了~仅供参考,如果想copy代码的朋友到文末吧,我把所有资料都打包了

%% 清空环境变量
clc
clear

%% 训练数据预测数据提取及归一化
%下载输入输出数据
load data input output

%随机选择1900组训练数据和100组预测数据
%12000间随机排序
k=rand(1,2000);%创建12000列服从0~1均匀分布的随机矩阵
[m,n]=sort(k);%m是从小到大排序后序列,排序结果放入m(1*2000)向量,n是m中各个元素在k中的下标

%找出训练数据和预测数据
input_train=input(n(1:1900),:)';%n(1:1900),:)表示取出input中1900行中的数值,单引号(')表示转置矩阵,得到1*1900数据
output_train=output(n(1:1900));%n表示从11900的列,也就是取出output里的1*1900的数据
input_test=input(n(1901:2000),:)';
output_test=output(n(1901:2000));

%选连样本输入输出数据归一化
[inputn,inputps]=mapminmax(input_train);%inputn保存归一化后数据,inputps为训练数据的设置,后面可用于预测数据同样归一
[outputn,outputps]=mapminmax(output_train);

%% BP网络训练
%net=newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF)
% %初始化网络结构
net=newff(inputn,outputn,5);%5个隐含层神经元
%TF节点传递函数,BTF训练函数,BLF网络学习函数,PF性能分析函数,IPF输入处理函数,OPF输出处理函数,DDF验证数据划分函数
net.trainParam.epochs=100;%设置训练训练次数,也就是迭代次数 
net.trainParam.lr=0.1;%设置学习率
net.trainParam.goal=0.00004; % 训练目标最小误差

%网络训练
%[net,tr]=train(NET,X,T,Pi,Ai)%待训练网络,输入数据,输出数据,初始化输入层条件,初始化输出层条件,tr训练过程记录
net=train(net,inputn,outputn);

%% BP网络预测
%预测数据归一化
inputn_test=mapminmax('apply',input_test,inputps);%做相同的归一,apply
 
%网络预测输出
%y=sim(net,x)
an=sim(net,inputn_test);%an得到网络预测数据
 
%网络输出反归一化
BPoutput=mapminmax('reverse',an,outputps);

%% 结果分析

figure(1)%figure是建立图形的意思,系统自动从1234...来建立图形,数字代表第几幅图形
plot(BPoutput,':og')%:表示用虚线,o表示数据点用圆圈显示,g是green
hold on  %保留当前图的轴(坐标系),再画另一幅图,原来的图还在
plot(output_test,'-*');
legend('预测输出','期望输出')% 显示在使用指定的字符串 来标记每个数据设置。
title('BP网络预测输出','fontsize',12)
ylabel('函数输出','fontsize',12)
xlabel('样本','fontsize',12)
%预测误差
error=BPoutput-output_test;


figure(2)
plot(error,'-*')
title('BP网络预测误差','fontsize',12)
ylabel('误差','fontsize',12)
xlabel('样本','fontsize',12)

figure(3)
plot((output_test-BPoutput)./BPoutput,'-*');
title('神经网络预测误差百分比')

errorsum=sum(abs(error));

感觉用MATLAB写简单了很多,我之前看了C语言版本的,很长很复杂,推荐大家先在MATLAB学会了再回头学C语言的

我没有信心保证注释完全正确,以上代码仅供参考学习,你一定要带着批判的眼光来读,有错误请指出,我会虚心接受,在评论区分享,大家一起学习~

————————————————————————————————————————————————

工程下载链接

发布了4 篇原创文章 · 获赞 15 · 访问量 1853

猜你喜欢

转载自blog.csdn.net/fengge2018/article/details/98500432
今日推荐