0

トレーニングから取得した重みは、入力で直接暗示されると、異なる結果を返します! 非常に単純な例でそれを示します。たとえば、各層に 1 つのニューロンを持つ 2 層の線形ネットワークをトレーニングした後、入力ベクトルx= 0:0.01:1; とターゲット ベクトルがあるt=x^2とします (非線形ネットワークを使用する方がよいことはわかっています)。次のようになります。

sim(net,0.95) = 0.7850(トレーニングのエラー - それは問題ありません) からの重みnet.IW,net.LW,net.b:

IW =

0.4547

LW =

2.1993

b =

0.3328   -1.0620

重みを使用する場合: Out = 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))
4

1 に答える 1