老饼讲解:一步一步上手学习
在matlab中训练完RBF神经网络后,往往希望查看RBF神经网络具体的模型数学表达式,本文通过一个具体的例子,展示如何在matlab中提取出RBF神经网络的隐层、输出层的权重、阈值,通过本文,可以了解如何在训练完RBF神经网络后获得RBF神经网络的模型数学表达式。
本节介绍在训练好RBF神经网络后如何提取网络的权重阈值。
在训练好RBF网络后,往往我们需要提取出它的数学表达式,也就是提取出如下形式的数学表达式:
要提取数学表达式,其实就是提取模型中的权重和阈值:和。
假设net是我们训练好的RBF网络,那么只需用如下语句就可以提取RBF网络的权重和阈值:
w1 = net.iw{1} % 提取隐层的权重(即径向基的中心)
b1 = net.b{1} % 提取隐层的阈值
w2 = net.lw{2,1} % 提取输出层权重
b2 = net.b{2} % 提取输出层的阈值备注:它同时适用于newrbe和newrb。
好了,下面我们来个具体的例子。我们先构建一个RBF神经网络,并提取出权重阈值,然后用RBF模型公式计算网络的输出,并与工具箱的sim函数进行比较(这里以newrb为例,但它同样适用于newrbe)。
% 本代码用于展示如何查看RBF径向基神经网络的权重和阈值
% 本代码来自《老饼讲解-rbf神经网络》www.bbblearn.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); % 构建RBF神经网络
% 提取网络的权重、阈值
w1 = net.iw{1} % 提取隐层的权重(即径向基的中心)
b1 = net.b{1} % 提取隐层的阈值
w2 = net.lw{2,1} % 提取输出层权重
b2 = net.b{2} % 提取输出层的阈值
% 检验公式的正确性:比较工具箱的结果与用公式计算的结果的最大差异
py_tool = sim(net,x); % 直接调用工具箱的sim函数来预测y
rbf = exp(-(repmat(b1,1,size(x,2)).*dist(w1,x)).^2); % 用公式计算RBF
py = sum(repmat(w2',1,size(x,2)).*rbf )+ b2; % 用公式计算模型输出
max_err = max(abs(py(:) - py_tool(:))) % 比较工具箱与公式计算结果的差异代码运行结果如下:

可以看到,提取出的权重阈值代入公式计算的结果与调用工具箱是一致的,说明这就是我们要提取的RBF神经网络的数学表达式了。
将上述权重、阈值整理后,就可以得到模型的表达式为:
其中:
dist函数是欧氏距离公式,
特别提示:
在实际应用中,数据样本较多,网络的权重、阈值相对也较大,所以一般都不会像文中那样打印出来,而是以窗口方式查看变量,如下:

好了,通过上述例子的解说,应该都知道如何在matlab查看RBF神经网络的数学表达式了~虽然在matlab中我们可以使用sim函数来预测,但一般只限于建模时使用,在建模完成后,要将模型布署到实际中使用时,那自然是先提取模型的权重、阈值,然后再用模型表达式来进行预测,这样更方便和快捷一些。
评论