私はMATLABの初心者です.Cのオンラインバックプロパゲーション(BP)コードを確認したいのですが、コードが同じネットワーク設定で正確に同じかどうかをテストする必要があります。ネットワーク設定は、元のBP(XOR問題の場合)2入力、2隠れノード、1出力です。使用される学習率設定は0.01、運動量0.95であり、停止基準は0.01であり、性能指標はsseである。エポックが を(私は後方に伝播するように前方に伝播から正確に計算を確認したいので、Cと全く同じネットワーク設定を確認するために)1であるここに私のコードです:実行後ニューラルネットで起こることMatlabのバックプロパゲーション
clear all;clc
input = [0 0; 0 1; 1 0; 1 1]';
target = [0 1 1 0]; % p = [-1 -1 2 2; 0 5 0 5]; % t = [-1 -1 1 1];
state0 = 1367;
rand('state',state0)
net = newff(input,target,2,{},'traingd');
net.divideFcn = '';
%set max epoh, goal, learning rate, show stp
net.trainParam.epochs =1;
net.trainParam.goal = 0.01;
net.performFcn ='sse';
net.trainParam.lr = 0.01;
net.adaptFcn=' ';
net.trainParam.show = 100;
net.trainparam.mc = 0.95;
net.layers{1}.transferFcn = 'logsig';
net.layers{2}.transferFcn = 'logsig';
wih = net.IW{1,1};
wihb= net.b{1,1};
who = net.LW{2,1};
whob = net.b{2,1};
%Train
net = train(net,input,target); %adapt
y= sim(net,input);
e=target-y;
perf = sse(e)
、私は0.609299823823181 あるマニュアルのカウントと異なるyが(1)0.818483286935909 であることがわかりました(私は計算によって再確認==>
for i=1:size(input,2)
hidden(1) = logsig(wih (1)*input(1) + wih(2)*input(2) + wihb(1));
hidden(2) = logsig(wih (3)*input(1) + wih(4)*input(2) + wihb(2));
out(i) = logsig(hidden(1)*who(1) + hidden(2)*who(2) + whob(1));end )
私の質問は次のとおりです。 1)オリジナルのMATLABがあるさtraingdを使って? 2)実際には何か net = train(net、input、target); y = sim(ネット、入力)。列車とシムを使用して手動計算で0.818483286935909ではなく0.609299823823181が得られた場合はどこに行ってください。
3)上記のようなMATLABコードと比較して、Cでの私の粗い順方向伝搬とは何が違うのですか?
お願いします。
2)私は、バッチトレーニングを使用してtraingd信じる(newff initとREINIT活性化機能の間に)異なる重みを初期化し、私はnewff機能を推測、私は機能を適応させる見ている、ニクラスに感謝。私はI = 1をチェック場合:サイズ(入力、2) 隠された(1)= logsig(WIH(1)*入力(1)+ WIH(2)*入力(2)+ wihb(1))。 隠された(2)= logsig(WIH(3)*入力(1)+ WIH(4)*入力(2)+ wihb(2))。アウト (I)= logsig(隠された(1)*(1)+隠された(2)*(2)+ whob(1)); END)3)Cコード以下同様 –