ニューラル ネットワークの matlab を作成しました。これはスクリプトです:
data.mat をロードします。
入力 = データ (:,1:8)';
ターゲット=データ(:,9)';
hiddenLayerSize = 10;
net = patternnet(hiddenLayerSize);
net.inputs{1}.processFcns = {'removeconstantrows','mapminmax', 'mapstd','processpca'};
net.outputs{2}.processFcns = {'removeconstantrows','mapminmax', 'mapstd','processpca'};
ネット = 構造体 (ネット);
net.inputs{1}.processParams{2}.ymin = 0;
net.inputs{1}.processParams{4}.maxfrac = 0.02;
net.outputs{2}.processParams{4}.maxfrac = 0.02;
net.outputs{2}.processParams{2}.ymin = 0;
ネット = ネットワーク (ネット);
net.divideFcn = 'divideind';
net.divideMode = 'サンプル'; % すべてのサンプルを分割する
net.divideParam.trainInd = 1:428;
net.divideParam.valInd = 429:520;
net.divideParam.testInd = 521:612;
net.trainFcn = 'trainscg'; % スケーリングされた共役勾配逆伝播
net.performFcn = 'mse'; % 平均二乗誤差
net.plotFcns = {'plotperform','plottrainstate','ploterrhist', 'plotregression', 'plotconfusion', 'plotroc'};
ネット=初期化(ネット);
net.trainParam.max_fail=20;
[net,tr] = train(net,inputs,targets);
出力 = ネット (入力);
エラー = gsubtract (ターゲット、出力);
パフォーマンス = 実行 (ネット、ターゲット、出力)
ここで、ネットワークの重みとバイアスを保存して、方程式を書きたいと思います。重みとバイアスを保存しました:
W1=net.IW{1,1};
W2=net.LW{2,1};
b1=net.b{1,1};
b2=net.b{2,1};
だから、私はデータの前処理を行い、次の式を書きました
max_range=0;
[y,ps]=removeconstantrows(input, max_range);
ymin=0;
ymax=1;
[y,ps2]=mapminmax(y,ymin,ymax);
平均=0;
ystd=1;
y=mapstd(x,ymean,ystd);
maxfrac=0.02;
y=processpca(y,maxfrac);
で=y';
uscita=tansig(W2*(tansig(W1*in+b1))+b2);
しかし、同じ入力 input=[1:8] では、異なる結果が得られます。なぜ?どうしたの?お願い助けて!重要です!
私はMatlab R2010Bを使用しています