我的问题很简单。我已经训练了一个前馈网络。现在我想提取它的权重和偏差,这样我就可以在另一种编程语言上测试它了。但是,当我用自己的代码测试那些经过训练的权重时,它总是返回与神经工具box.here是我的代码不同的结果。
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')它是一个简单的神经网络,只有两层。这里没有规模化或标准化的结果

发布于 2016-11-28 09:54:10
神经网络输入和输出在默认情况下映射到[-1;1]范围,因此Z和Y的计算对于映射值是正确的,而对于实际输入和输出则是正确的。为了避免这种情况,您可以取消设置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));https://stackoverflow.com/questions/40837406
复制相似问题