赞
踩
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
目录
3.3-不调用工具箱自实现BP神经网络:老饼|BP神经网络-BP算法重现
本文展示一个日常使用BP神经网络时用于参考的代码DEMO模板
这里提供一个相对全面的DEMO作为模板,
方便日常使用BP神经网络时复制
代码整体思路如下
1、生成数据
2、设置一个三层的BP网络,并将隐节点设为3
3、训练网络
4、网络效果评估
(1) 打印训练数据、测试数据的平均绝对误差、平均绝对误差占比
(2) 绘制训练数据、测试数据的拟合效果
5、使用训练好的网络对数据进行预测
具体代码如下(matlab2018a亲测已通过)
- clear all;
- close all ;
- %================原始数据====================
- x1 = linspace(-3,3,100); % 在[-3,3]之间线性生成100个数据
- x2 = linspace(-2,1.5,100); % 在[-2,1.5]之间线性生成100个数据
- X = [x1;x2]; % 将x1,x2作为输入数据
- y1 = 10*sin(x1)+0.2*x2.*x2; % 生成y1
- y2 = 10*sin(x2)+0.2*x1.*x1; % 生成y2
- y = [y1;y2]; % y里包含两个输出y1,y2
- setdemorandstream(88); % 老饼为了每次运行的结果一致设定随机种子,实际中可以去掉
- %==============网络训练 ============================
- %使用用输入输出数据(X,y)建立网络,
- %隐节点个数设为3.其中输入层到隐层、隐层到输出层的节点分别为tansig和purelin,使用trainlm方法训练。
- net = newff(X,y,3,{'tansig','purelin'},'trainlm');
- %设置一些常用关键参数
- net.trainparam.goal = 0.00001; % 训练目标:均方误差低于0.0001
- net.trainparam.show = 400; % 每训练400次展示一次结果
- net.trainparam.epochs = 15000; % 最大训练次数:15000.
- net.divideParam.trainRatio = 0.7; % 用于训练的数据比例
- net.divideParam.valRatio = 0.15 ; % 用于验证过拟合的数据比例
- net.divideParam.testRatio = 0.15; % 用于比例
- net.trainparam.max_fail = 6; % 过拟合验证失败次数
-
- [net,tr,net_y] = train(net,X,y); % 调用matlab神经网络工具箱自带的train函数训练网络y,net返回
-
- % ===========网络效果评估==================================
- % 提取训练数据与测试数据
- train_net_y = net_y(:,tr.trainInd); % 训练数据的预测值
- test_net_y = net_y(:,tr.testInd); % 测试数据的预测值
- train_y = y(:,tr.trainInd); % 训练数据的真实值
- test_y = y(:,tr.testInd); % 测试数据的真实值
-
- % 计算误差
- train_err = mean(abs(train_net_y(:)-train_y(:))) % 训练数据的误差
- test_err = mean(abs(test_net_y(:)-test_y(:))) % 测试数据的误差
- train_err_rate = mean(abs((train_net_y(:)-train_y(:))./train_y(:))) % 训练数据的误差比
- test_err_rate = mean(abs((test_net_y(:)-test_y(:))./test_y(:))) % 测试数据的误差比
-
- % 绘制拟合曲线图
- figure
- [out_size,sample_num] = size(y); % 输出的个数,样本个数
- for i = 1 : out_size
- % 绘制训练数据第i个输出的拟合效果
- subplot(out_size,2,(i-1)*2+1);
- title(['训练数据-第',num2str(i),'个输出的拟合效果'])
- hold on
- plot(1:size(train_y,2),train_y(i,:),'b')
- plot(1:size(train_net_y,2),train_net_y(i,:),'r')
- % 绘制测试数据第i个输出的拟合效果
- subplot(out_size,2,(i-1)*2+2);
- title(['测试数据-第',num2str(i),'个输出的拟合效果'])
- hold on
- plot(1:size(test_y,2),test_y(i,:),'b')
- plot(1:size(test_net_y,2),test_net_y(i,:),'r')
- end
%=============网络对新输入的使用==========================
sim_y = sim(net,X); % 实际与上面的net_y一致
以上就是一个完整的matlab实现BP神经网络Demo代码了
使用时主要修改的有方法
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。