本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com
BP神经网络归一化使用Demo
本文展示如何利用《BP神经网络归一化训练Demo》的nbp3函数训练一个三层BP神经网络
由于nbp3训练后的网络是面向归一化数据的
本文展示训练后的网络应该如何预测新样本
具体代码如下
close all;clear all;
%-----------数据----------------------
x1 = [-3,-2.7,-2.4,-2.1,-1.8,-1.5,-1.2,-0.9,-0.6,-0.3,0,0.3,0.6,0.9,1.2,1.5,1.8]; % x1:x1 = -3:0.3:2;
x2 = [-2,-1.8,-1.6,-1.4,-1.2,-1,-0.8,-0.6,-0.4,-0.2,-2.2204,0.2,0.4,0.6,0.8,1,1.2]; % x2:x2 = -2:0.2:1.2;
X = [x1;x2]; % 将x1,x2作为输入数据
y = [0.6589,0.2206,-0.1635,-0.4712,-0.6858,-0.7975,-0.8040,...
-0.7113,-0.5326,-0.2875 ,0.9860,0.3035,0.5966,0.8553,1.0600,1.1975,1.2618]; % y: y = sin(x1)+0.2*x2.*x2;
%--------参数设置与常量计算-------------
setdemorandstream(88);
hide_num = 3; % 设置隐节点个数
[w21,b2,w32,b3,xmin,xmax,ymin,ymax,mse_record] = nbp3(X,y,hide_num); % 调用nbp3进行网络训练
Xn = 2*(X -repmat(xmin,1,size(X,2)))./repmat(xmax-xmin,1,size(X,2)) - 1; % 将输入数据进行归一化
simy = w32*tansig(w21*Xn+repmat(b2,1,size(Xn,2)))+repmat(b3,1,size(Xn,2)); % 预测结果
simy = (simy+1).*(ymax-ymin)./2 + ymin; % 对结果反归一
% -------------绘制训练结果与打印模型参数-----------------------------
h = figure;
[~,sample_num] = size(X);
subplot(1,2,1)
plot(mse_record)
subplot(1,2,2)
plot(1:sample_num,y);
hold on
plot(1:sample_num,simy,'-r');
set(h,'units','normalized','position',[0.1 0.1 0.8 0.5]);
%--模型参数--
w32 % 隐层到输出层的权重
b3 % 输出层阈值
w21 % 输入层到隐层权重
b2 % 隐层阈值
运行结果
笔者在2018a中的运行结果如下
![]()
可见,网络已经有效地拟合训练数据
End