根据BP神经网络的误差梯度下降以及误差反向传递的原理,使用Matlab实现算法。本文设计了一个输入层为3,中间层为6,输出层为5的神经网络。其中theta1和theta2分别为两层参数,示意图如下:
1.主程序
%随机生成一组参数
theta_1=rand(6,3);
theta_2=rand(5,6);
%训练
for i=1:500
x=rand(1,3);
y=createSample(x(1),x(2),x(3));%自己随便写的一个非线性函数
[theta_1,theta_2]=bpFunction(theta_1,theta_2,x,y);%自己写的BP网络
end
%测试
x=rand(1,3);
y=createSample(x(1),x(2),x(3));
z_2=x*(theta_1)';%单节点求和,然后组合成向量
a_2=sigmf(z_2,[1,0]);%隐层sigmoid输出激励
z_3=a_2*(theta_2)';
a_3=sigmf(z_3,[1,0]);%输出层sigmoid输出结果
测试的函数实际上就是神经网络正向传递的过程,测试结果如下:
500次训练:y是标准答案,a_3是输出结果