2012-08-04 59 views
0

當直接隱含在輸入上時,我從訓練中獲得的權重返回不同的結果! 我將演示一個非常簡單的例子 假設我們有一個輸入向量x= 0:0.01:1; 和目標矢量t=x^2(我知道它更好地使用非線性網絡) 訓練後,2層,線性網絡,與一個神經元每一層,我們得到:來自訓練的簡單線性神經網絡權重與訓練結果不兼容

sim(net,0.95) = 0.7850(一些錯誤的訓練 - 這是確定也應該)從net.IW,net.LW,net.b:

IW 權重=

0.4547 

LW =

2.1993 

B =

0.3328 -1.0620 

如果我使用的權重:時間= purelin(purelin(0.95 * IW + B(1))* LW + B(2))= 0.6200 ! ,我從SIM卡的結果中得到了不同的結果! 怎麼可能?怎麼了?

的代碼:

%Main_TestWeights 
close all 
clear all 
clc 


t1 = 0:0.01:1; 
x = t1.^2; 

hiddenSizes = 1; 
net = feedforwardnet(hiddenSizes); 


[Xs,Xi,Ai,Ts,EWs,shift] = preparets(net,con2seq(t1),con2seq(x)); 
net.layers{1,1}.transferFcn = 'purelin'; 
[net,tr,Y,E,Pf,Af] = train(net,Xs,Ts,Xi,Ai); 
view(net); 


IW = cat(2,net.IW{1}); 
LW = cat(2,net.LW{2,1}); 
b = cat(2,[net.b{1,1},net.b{2,1}]); 

%Result from Sim 
t2=0.95; 
Yk = sim(net,t2) 

%Result from Weights 
x1 = IW*t2'+b(1) 
x1out = purelin(x1) 
x2 = purelin(x1out*(LW)+b(2)) 
+0

,我不知道這在所有的,但會不會是網絡以某種方式規範輸入和目標?如果是這樣,那麼報告的權重將無用,而不必對自己的輸入應用相同的標準化。另外,我認爲你應該在加權之前加上偏差(例如((輸入+ b(1))* IW + b(2))* LW)。 – Niclas 2012-08-04 17:51:50

回答

0

的神經網絡工具箱重新調整輸入和輸出到[-1,1]範圍內。因此,必須重新調整和unscale它讓你的模擬輸出是相同的SIM()的輸出:

%Result from Weights 
x1 = 2*t2 - 1; # rescale 
x1 = IW*x1+b(1); 
x1out = purelin(x1); 
x2 = purelin(x1out*(LW)+b(2)); 
x2 = (x2+1)/2 # unscale 

然後

>> x2 == Yk 

ans = 

    1