本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
插值法是构建RBF神经网络的一种基础方法,通过插值法能够0误差地拟合任何数据
本文展示使用插值法构建RBF神经网络的具体代码实现,它与matlab中的newrbe函数的结果一致
通过本文,可以了解如何使用插值法构建一个RBF神经网络,以及matlab中newrbe函数的原理
本节展示如何不依赖软件包,使用插值法自实现RBF径向基神经网络的代码
RBF神经网络-自实现代码(插值法)
插值法是构建RBF神经网络的一种基础方法,它的原理可以参考《RBF神经网络-训练原理(插值法)》
本文根据插值法构建RBF神经网络的算法流程,展示如何自实现一个RBF神经网络
具体实现代码如下:
% 本代码使用插值法实现RBF神经网络,即matlab工具箱中的newrbe函数
% 笔者的运行版本:matlab 2014b
% 本代码来自《老饼讲解-神经网络》www.bbbdata.com
% 生成训练数据
X = [1:0.4:3; 1:0.4:3]; % 训练样本的X
Y = sin(X(1, :)) + X( 2, :); % 训练样本的Y
spread = 2; % 设置spread
m = size(X,2); % 样本个数
% 隐层的权值和阈值
W2 = X'; % 输入层到隐层的权重
B2 = ones( m, 1)*sqrt( -log(.5))/spread; % 隐层的阈值
% 计算隐节点的激活值
h = zeros( m, m); % 初始化隐层激活值
for i = 1: m % 逐个样本计算
for j = 1 : m % 逐个隐节点计算
h(i,j) = B2(j)*sqrt(sum((X(:,i)' -W2(j,:)).^2)); % 计算第i个样本,第j个隐节点的神经元值
end
end
A = exp( -h.*h) ; % 计算隐节点的激活值
% 求解输出层的权值和阈值
C = [ A; ones( 1,size( A,2))]; % 将激活值加上一行1,组成方程组的系数矩阵
WB = Y /C; % 求解线性方程组
W3 = WB( :, 1:end-1); % 提取出输出层权重
B3 = WB( :, end); % 提取出输出层阈值
% 输出模型的权重、阈值
W2 % 打印模型隐层权重
B2 % 打印模型隐层阈值
W3 % 打印模型输出层权重
B3 % 打印模型输出层阈值
代码运行结果如下![]()
在本代码中使用插值法构建了一个RBF神经网络
事实上它就是matlab工具箱newrbe函数所使用的方法,
有兴趣的同学可以用newrbe训练一个RBF神经网络,它与上述代码得到的权重、阈值是一样的
好了,以上就是如何使用插值法来构建一个RBF神经网络的代码实现了~
End