2

ニューラル ネットワークの 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を使用しています

4

2 に答える 2

1

入力を前処理しているようですが、出力を後処理していないようです。後処理は「逆」処理形式を使用します。(ターゲットは前処理されるため、出力は逆処理されます)。

于 2012-01-23T21:54:22.900 に答える
-1

この方程式

uscita=tansig(W2*(tansig(W1*in+b1))+b2); 

間違っている。なぜあなたは2つ書くのtansigですか?あなたはそれを10回書くか、またはのために使うべき10のネロウンを持っていますi=1:10;

于 2013-08-01T20:03:56.813 に答える