matlab中feedforwardnet手工实现
matlab的前向神经网络feedforwardnet训练完成后可以使用sim函数进行预测,但是sim函数在进行单个样本预测时计算时间很长,具体原因未知。将训练好的神经网络权重提取出来,进行单个样本预测,能够大大减少计算时间,但是由于train函数在训练时会将输入输出数据归一化,所以需要在手工计算时同样使用上述过程。
接下来给出具体的实现样例
首先给出样例的网络结构:
样例是一个2输入2输出的BP网络;包含两个隐层,第一个隐层包含10个神经元,第二个隐层包含15个神经元。训练过程不再介绍,网上有很多相关代码。
手工实现过程
话不多说,直接上代码
// 手工实现feedforwardnet
clear all;
%% 导出网络参数
load net.mat;
iw=net2.IW;
lw=net2.LW;
b=net2.b;
b1=b{1};
b2=b{2};
b3=b{3};
w1=iw{1};
w2=lw{2,1};%隐层网络权值具体放在哪个元组下可以直接在变量区点击查看,我这里是(2,1)和(3,2)
w3=lw{3,2};
%% 设置测试值
x=[0.3;0.5];
x_in=mapminmax('apply',x,net2.inputs{1}.processSettings{1});%输入归一化
%% 使用网络权重得计算值
v11=w1*x_in+b1;
v12=tansig(v11);
v21=w2*v12+b2;
v22=tansig(v21);
v31=w3*v22+b3;
v32=purelin(v31);%实际网络输出
v_out=mapminmax('reverse',v32,net2.outputs{3}.processSettings{1});% 反归一化后网络输出
%% 直接仿真值
sim_out=sim(net2,x);
%% 查看差值
sim_out-v_out
经过测试,仿真输出和手工输出相同