Matlab神经网络工具箱,关于提取权重&来自feedforwardnet的偏见

时间:2016-11-28 04:53:45

标签: matlab neural-network

我的问题很简单。我训练了一个feedforwardnet。现在我想提取它的权重和偏差,以便我可以用另一种编程语言测试它。但是当我用我自己的代码测试那些训练过的权重时,它总是会返回与神经工具箱相比的不同结果。这是我的代码

close all 
RandStream.setGlobalStream (RandStream ('mrg32k3a','Seed', 1234));
[x,t] = simplefit_dataset;
plot(t)
hold on 
topo = [2]
net = feedforwardnet(topo);
net = train(net,x,t);
view(net)
y = net(x);
plot(y)

%rewrite net

BI = net.B{1};
WI = net.IW{1};

BO = net.B{2};
WO = net.LW{2};

% input layer

Z = WI*x + BI*ones(1,length(x));
Z = 2./(1+exp(-2*Z))-1;

Y = WO*Z + BO*ones(1,length(x));

plot(Y)
legend('target','tool box result','my result')
它是一个简单的神经网络,只有两层。 不暗示缩放或标准化 这是结果

enter image description here

1 个答案:

答案 0 :(得分:0)

默认情况下,神经网络输入和输出映射到[-1;1]范围,因此ZY的计算对于映射值是正确的,而不是对于实际输入和输出。为避免这种情况,您可以取消设置processFcns属性:

 ....
net = feedforwardnet(topo);
net.inputs{1}.processFcns= {};
net.outputs{2}.processFcns= {};
net = train(net,x,t);
 ....

或者,您可以手动映射输入和输出值:

x= mapminmax(x,-1,1);
Z = WI*x + BI*ones(1,length(x));
Z = 2./(1+exp(-2*Z))-1;
Y = WO*Z + BO*ones(1,length(x));
Y= mapminmax(Y,min(y),max(y));