冰冰点灯,照亮我家门前~
欢迎进入nnetinfo
用户名:
密码:
深圳学习数据分析,数据挖掘,请联系yahushuxue@163.com~
nnetinfo : 本网发布神经网络相关的学习与研讨内容。
当前位置:教学区
广义回归myNewgrnn(动手写自己的代码)
作者:梁小h   日期:2015-11-09 12:24:53.0

=====  <文档仅供查阅和简单了解,深入了解请关注神经网络之家发布的___神经网络教学视频___>   ====

     本文主要讲解如何用代码实现广义回归神经网络,要了解广义回归神经网络原理的同学请参考文章:

                                                  <一篇文章读懂径向基神经网络原理(上)>

                                                    <一篇文章读懂径向基神经网络原理(下)>

      使用matlab工具箱直接调用newgrnn实现径向基神经网络请参考文章:

                                                             <径向基(matlab工具箱)>

      好,开始正文,

一.代码分析

      建立广义回归神经网络并不需要多少计算,只需要求三个参数

      输入到隐层的权重:W1

      隐层阈值:B1

      隐层到输出层的权重:W2

 

     三个参数都只需直接赋值即可:

     W1=训练数据的输入

     B1=spread/sqrt(ln(0.5))

      W2=训练数据的输出.

      需要注意的是,广义回归神经网络的径向基需要作归一化,这点与其它网络有所不同.

      理论就简单介绍到这里,对神经网络原理不理解的同学请参考前面介绍的两张文章.

      详细实现请看代码:

二.代码实现

function testNewgrnn()
%本代码来自www.nnetinfo.com
%本代码模仿matlab神经网络工具箱的newgrnn神经网络,
%代码主旨用于教学,供大家学习理解newrgrnn神经网络原理

%%生成训练数据
x1 = 1:0.4:10;   
x2 = x1;
X  = [ x1; x2];    
Y  = sin (X(1, :)) + X( 2, :);
spread = 2;  %扩展系数

 xx = [2 3]'; %测试数据
[W1,B1,W2] = myGrnn( X,Y,spread );
simY = mySim(W1,B1,W2,xx); %自编网络的输出

net=newgrnn(X,Y,spread);   % 用工具箱设计广义回归网络
simYByBox =  sim(net, xx); % 工具箱的输出  

testResult = isequal( simY, simYByBox);  
disp(['testResult = ',num2str(testResult)]);

web('www.nnetinfo.com')
end


function [W1,B1,W2] = myGrnn(X,Y,spread)
%生成广义神经网络只要将输入输出存到W1,W2中,
%再用spread生成影响径向基宽度的B1就可以

Q = size(X,2);
W1 = X'; %
W2 = Y;
B1 = ones( Q, 1)*sqrt( -log(.5))/spread;
end

function y = mySim(W1,B1,W2,xx)
%求隐节点的值
hNode = length(B1);
h = zeros(hNode,1);
for i = 1 : hNode
    h(i) = B1(i)*sqrt(sum((xx'-W1(i,:)).^2));
end

%求隐节点传递后(径向基)的值
bh = exp(-(h.*h));

%归一化
bhNorm = bh ./sum(bh);

%乘以输出层的权重,作为网络最终的输出
y = W2*bhNorm;
end

结束语

     阅读代码,调试代码,才能真正的理解神经网络算法的原理,希望本文能够帮助大家进一步掌握神经网络原理.

==============<原创文章,转载请说明来自神经网络之家www.nnetinfo.com>     ==========