本站原创文章,转载请说明来自《老饼讲解-BP神经网络》www.bbbdata.com
本代码用于测试自写BP神经网络初始化代码《InitBP》与matlab工具箱的初始化结果是否一致
代码简要解说
DEMO代码主要干的事情如下:
👉1. 先用工具箱进行初始化一个两隐层的神经网络
👉2. 再用自写代码InitBP初始化一个两隐层的神经网络
然后分别打印工具箱的初始化结果,与InitBP的初始化结果
InitBP的测试DEMO
% ------------输入输出数据---------------------
X = [-1:0.2:1;-1:0.2:1]*10;
y = sin (X(1,:)*10)+X(2,:);
% 将输入数据进行归一化(因为matlab工具箱会默认以归一化数据进行初始化)
X = 2*(X-min(X,[],2))./(max(X,[],2)-min(X,[],2))-1;
%-------- 调用工具箱初始化BP神经网络 -------------
rand('seed',70);
net = newff(X,y,[4,2],{'tansig','tansig','purelin'},'trainlm');
disp('------matlab工具箱初始化的权重和阈值-------')
w21 = net.iw{1,1} % 第1层(输入层)到第2层(隐层)的权值
b2 = net.b{1} % 第2层(隐层)的阈值
w32 = net.lw{2,1} % 第2层到第3层的权值
b3 = net.b{2} % 第3层的阈值
w43 = net.lw{3,2} % 第3层(输入层)到第4层(输出层)的权值
b4 = net.b{3} % 第4层(输出层)的阈值
%------- 调用自写函数初始化BP神经网络 ----------------------
rand('seed',70);
[W,B] = InitBP(X,y,[4,2],{'tansig','tansig','purelin'});
disp('-------自写代码初始化的权重和阈值-------')
W21 = W{1,2} % 第1层(输入层)到第2层(隐层)的权值
B2 = B{2} % 第2层(隐层)的阈值
W32 = W{2,3} % 第2层到第3层的权值
B3 = B{3} % 第3层的阈值
W43 = W{3,4} % 第3层(输入层)到第4层(输出层)的权值
B4 = B{4} % 第4层(输出层)的阈值
版本:matlab 2018a
代码运行结果
代码运行结果如下
从结果可以看到,两者的初始化结果是一致的
说明InitBP成功复现了matlab神经网络工具的初始化逻辑
End