BP神经网络的基本应用
公式提取
【例子】提取BP神经网络的数学表达式Demo(对应原始数据)
作者 : 老饼 日期 : 2022-06-12 08:44:03 更新 : 2022-10-28 23:25:31
本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com



由于BP神经网络往往需要将数据归一化再训练,

因此得到的模型也是对应归一化数据的,在使用中有所不便。

本文我们讲解,如何将 归一化数据的BP神经网络模型 映射回 原始数据的网络模型。 

本文是《BP神经网络表达式的反归一化》的具体代码实现



  01 . 问题背景  


    问题背景   


BP神经网络一般会先将训练数据归一化,再进行训练,但这样训练出来的网络,是归一化数据所对应的网络,
《提取BP神经网络的数学表达式DEMO》已经讲述了如何提取出matlab神经网络模型的数学表达式,
在本文,我们讲述如何提取出原始数据对应的BP神经网络数学表达式。
要提取出原始数据对应的BP神经网络数学表达式,
只需要先提取出归一化下的BP神经网络数学表达式,
再把它映射回对应原始数据的BP神经网络数学表达式就可以了
具体映射公式我们已经在《BP神经网络表达式的反归一化》中进行讲解,
在这里我们仅展示一个实现Demo



  02 . 提取BP神经网络数学表达式Demo代码(对应原始数据)  


下面展示如何在网络训练后提取出原始数据对应的BP神经网络模型表达式


    Demo代码(matlab2014b)    


%本代码展示如何提取BP神经网络原始数据对应的模型表达式
%转载请说明来自 《老饼讲解神经网络》 bp.bbbdata.com
%---------------原始数据------------------
X= [linspace(-3,3,100),linspace(-2,1.5,100)];       % 生成输入数据
y = 10*sin(X(1,:))+0.2*X(1,:).^2;   % 生成y
setdemorandstream(88);                              % 老饼为了每次运行的结果一致设定随机种子,实际中可以去掉
%------------网络训练 ---------------------------
net            = newff(X,y,3,{'tansig','purelin'},'trainlm');
[net,tr,net_y] = train(net,X,y);                    % 调用matlab神经网络工具箱自带的train函数训练网络y,net返回
sim_y          = sim(net,X);                        % 网络对输入的预测

%----------------提取原始数据对应的模型数学表达式-----------------------------------
% 提取权重WB
w12 = net.iw{1,1};                           % 第1层(输入层)到第2层(隐层)的权值
b2  = net.b{1};                              % 第2层(隐层)的神经元阈值
w23 = net.lw{2,1};                           % 第2层(输入层)到第3层(输出层)的权值
b3  = net.b{2};                              % 第3层(输出层)的神经元阈值

% 获取数据归一化时的输入输出范围,用于反归一
matlabMode  = nnMATLAB;
matlabHints = matlabMode.hints;
matlabHints = nnMATLAB.netHints(net,matlabHints);
iMin  = matlabHints.inp.procSet{1,1}.xmin;
iMax  = matlabHints.inp.procSet{1,1}.xmax;
oMin  = matlabHints.out.procSet{1,1}.xmin;
oMax  = matlabHints.out.procSet{1,1}.xmax;

% 将网络的WB反归一化
W12 = w12 * 2 ./repmat(iMax' -iMin',size(w12,1),1);
B2  = -w12* (2*iMin ./(iMax - iMin) + 1) + b2;
W23 = w23 .*repmat((oMax -oMin),1,size(w23,2))/2;
B3  = (oMax -oMin) .*b3 /2 + (oMax -oMin)/2 + oMin;

% 用模型的表达式对数据进行预测
formula_sim_y = W23*tansig( W12 *X + repmat(B2,1,size(X,2))) + repmat(B3,1,size(X,2));

%-----验证按模型表达式计算与用工具箱计算的差异------------------------
formula_err = max(max(abs(formula_sim_y - sim_y)));
disp(['模型表达式计算与用工具箱计算的最大差异:',num2str(formula_err)])
运行代码后可以看到,提取出的BP神经网络数学表达式的预测结果与用工具箱sim函数的预测结果基本一致 




 End 






联系老饼