本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
本文介绍如何从matlab的RBF神经网络中将数学表达式中的权重阈值提取出来
并进一步展示一个具体的例子,展示具体是如何提取出来的,并在提取后验证数学表达式的准确性
本节介绍在训练好RBF神经网络后如何提取网络的权重阈值
RBF神经网络的数学公式提取方法
在训练好RBF网络后,往往我们需要提取出它的数学表达式,
也就是提取出如下形式的数学表达式:
要提取数学表达式,其实就是提取网络的权重和阈值:
假设net是我们训练好的RBF网络,
那么只需用如下语句就可以提取RBF网络的权重和阈值:
w21 = net.iw{1} % 提取隐层的权重(即径向基的中心)
b2 = net.b{1} % 提取隐层的阈值
w32 = net.lw{2,1} % 提取输出层权重
b3 = net.b{2} % 提取输出层的阈值
备注:它同时适用于newrbe和newrb
本节完整展示一个RBF神经网络提取权重阈值的例子
并对提取结果进行准确性校验
RBF神经网络的数学公式提取方法
下面先构建一个RBF神经网络,并提取出权重阈值
然后用RBF模型公式计算网络的输出,并与工具箱的sim函数进行比较
这里以newrb为例,同样适用于newrbe
%------代码说明:展示如何查看RBF径向基神经网络的权重和阈值 -----------------
% 来自《老饼讲解神经网络》www.bbbdata.com ,matlab版本:2018a
%-------------------------------------------------------------------%
%----数据准备----
x = [-2,-1,0,1,2;-6,-2,0,3,8]; % 输入数据
y = [3,2,3,1,2]; % 输出数据
%----网络训练----
net = newrb(x, y, 0.1,0.5); % 以X,Y建立径向基网络,目标误差为0.01,径向基的宽度参数spread=0.5
% 提取网络的权重、阈值
w21 = net.iw{1} % 提取隐层的权重(即径向基的中心)
b2 = net.b{1} % 提取隐层的阈值
w32 = net.lw{2,1} % 提取输出层权重
b3 = net.b{2} % 提取输出层的阈值
% 检验公式的正确性:比较工具箱的结果与用公式计算的结果的最大差异
py_tool = sim(net,x); % 直接调用工具箱的sim函数来预测y
rbf = exp(-(repmat(b2,1,size(x,2)).*dist(w21,x)).^2); % 用权重、阈值代入公式计算RBF
py = sum(repmat(w32',1,size(x,2)).*rbf )+ b3; % 用权重、阈值代入公式计算最终的输出
max_err = max(abs(py(:) - py_tool(:))) % 比较工具箱的结果与用公式计算的结果的最大差异
代码运行结果
运行结果如下
将上述权重、阈值代回数学表达式,即如下:
其中,dist函数是欧氏距离公式,它的计算如下:
可以看到,
提取出的权重阈值代入公式计算的结果与调用工具箱是一致的,
说明这就是我们要提取的RBF神经网络的数学表达式了
补充
在实际应用中,数据样本较多,网络的权重、阈值相对也较大,
所以一般都不会像文中那样打印出来,而是以窗口方式查看变量
好了,通过上述例子的解说,应该都知道如何在matlab查看RBF神经网络的数学表达式了~
End