【matlab小白训练】BP神经网络

  首先,本人是个matlab小白,也是在参加数模的时候才接触到matlab,暑期在巩固matlab的时候,根据网上找的数据,边做边学matlab。

 

  此外,这是本人第一次撰写文章,必定会有很多疏漏。如果有侵权的地方,本人会立马删除此文章;如果有幸大佬能看到此文章,也欢迎大佬提出意见。

目录

前言

一、数据获取

二、BP神经网络代码

1.训练

2.画图对比原本数据和预测的数据 

3.预测数据

三、总结


前言

  这次BP神经网络的练习数据来源是《人工神经网络》HZAU数模基地,我以此为基础进行BP神经网络训练,得到的代码可以作为后期参加比赛是直接参考使用。

一、数据获取

实验号 臭氧浓度(mg/L) 入口UV254 UV254去除率(%)
1 1.16 0.116 50.2
2 1.35 0.104 59.5
3 1.72 0.078 58.8
4 1.86 0.107 66.2
5 1.97 0.136 65.5
6 2.15 0.082 64.5
7 2.23 0.125 73.6
8 2.48 0.076 76.4
9 2.79 0.122 78.5
10 2.85 0.092 79.2
11 3.07 0.081 81.4
12 3.45 0.068 90.3
13 3.59 0.077 93.1
14 3.8 0.108 98.2
15 3.93 0.128 97.3
16 4.14 0.063 98.1
17 4.46 0.135 97.3
18 4.55 0.07 98.8
19 4.84 0.126 96.9
20 5.03 0.087 98.6

二、BP神经网络代码

1.训练

其中我取了上表前19组数据进行训练,代码如下:

%自行导入输入数据x和输出数据y。
input_x = [x1'; x2'];
output_y = y';

%注意将列向量转置成行向量!!!
%本模板的输入数据x1,x2,输出数据为y,。可根据实际情况删改

%可用“setdemorandstream(114514);”固定随机种子,防止每次训练结果不一样

%隐藏节点数可以根据经验公式n=2m+1确定,其中n为隐藏节点数,m为输入个数;我这里直接取了3。
%隐层的传递函数为tansig,输出层的传递函数为purelin
%使用trainlm方法训练

net = newff(input_x,output_y,3,{'tansig','purelin'},'trainlm');

%常用参数的设置
net.trainparam.goal = 0.001;   %训练目标:均方误差低于0.001
net.trainparam.show =  200;    %每训练200次展示一次结果
net.trainparam.epochs = 10000; %最大训练次数为10000

[net,tr] = train(net,input_x,output_y); %调用matlab神经网络工具箱自带的train函数训练网络
simout = sim(net,input_x);     %调用matlab神经网络工具箱自带的sim函数得到的网络的预测值

2.画图对比原本数据和预测的数据 

figure;                        %新建画图窗口
t=1:length(simout);
plot(t,y,t,simout,'r')         %画图,对比原来的y和网络预测

【matlab小白训练】BP神经网络_第1张图片

3.预测数据

x = [5.03;0.087]; %表中第20个实验的数据
simy = sim(net,x) %得到的预测值

【matlab小白训练】BP神经网络_第2张图片

原本的20个实验的结果是98.6,而预测出来的时99.6385,有细微差别。

三、总结

练习的过程中发现,要将导入的数据转置成行向量(一般matlab导入的都是列向量)

预测结果还是有一些误差的,不过这个应该可以通过调参数来提高准确度的(后续我还是得反复摸索改进)

你可能感兴趣的:(数学建模-边做边学,matlab,神经网络)