私はバックプロパゲーションの2層ニューラルネットワークの作成に取り組んでいます。 NNは、各行の次の情報を保持する20001x17ベクトルからデータを取得することになっています。Matlab - ニューラルネットワークトレーニング
- 最初の16個のセルは、それらの変数を見るときに表現することを意味しています。例えば、以下のような一連の16個の値は、文字Aを表すことを意味する:[2 8 4 5 2 7 5 3 1 6 0 8 2 7 2 7]。
- 第17番目のセルには、必要なアルファベットの文字を表す1から26までの数字が入ります。 1はAを表し、2はBなどを表す。
NNの出力レイヤーは26の出力で構成されています。上記のような入力がNNに入力されるたびに、入力値が表す文字に対応する1つのセルを除くすべてのセルに0を含む1x26ベクトルを出力するはずです。例えば、出力[1 0 0 ... 0]は文字Aになりますが、[0 0 0 ... 1]は文字Zになります。
私はコードを提示する前に、私の問題に
今%%%%%%%%
%Start of code%
%%%%%%%%
%
%Initialize the input and target vectors
%
p = zeros(16,20001);
t = zeros(26,20001);
%
%Fill the input and training vectors from the dataset provided
%
for i=2:20001
for k=1:16
p(k,i-1) = data(i,k);
end
t(data(i,17),i-1) = 1;
end
net = newff(minmax(p),[21 26],{'logsig' 'logsig'},'traingdm');
y1 = sim(net,p);
net.trainParam.epochs = 200;
net.trainParam.show = 1;
net.trainParam.goal = 0.1;
net.trainParam.lr = 0.8;
net.trainParam.mc = 0.2;
net.divideFcn = 'dividerand';
net.divideParam.trainRatio = 0.7;
net.divideParam.testRatio = 0.2;
net.divideParam.valRatio = 0.1;
%[pn,ps] = mapminmax(p);
%[tn,ts] = mapminmax(t);
net = init(net);
[net,tr] = train(net,p,t);
y2 = sim(net,pn);
%%%%%%%%
%End of code%
%%%%%%%%
:私私は、以下のMATLABコードを書いた上記のコンセプトを作成しようとしてい21
で(今のところ)traingdm機能を使用する必要があり、中間層の数が固定されています。つまり、y2ベクトルの各列は文字の表現でなければなりません。私のコードはそれをしません。代わりに、0と1の間で大きく変化する結果、0.1〜0.9の値が得られました。
私の質問です:私はそうしている必要がある変換がありますか?意味は、自分の入力データや出力データを、自分のNNが正しく学習しているかどうかを確認するためのフォームに変換する必要がありますか?
すべての入力をいただければ幸いです。
マーティン、応答に感謝します。 max(y2)を使うと、ネットワークが文字の識別に何回使ったかに関する情報を今すぐに得ることができます。しかし、私がしたデータは、ネットワークに供給する前に、0 <= p(x)<= 1になるようにスケールダウンしました。 pの最小値が0で最大値が15であることを見て、私は新しい入力ベクトルscaledp = p/15を作った。 –
maxをアクティビティ関数として使用しないでください。なぜなら、エラー関数はアクティビティではなくアクティビティ上で定義する必要があり、maxは区別できないため、バックプロパックを使用できないからです。あなたはsoftmaxが必要です、以下の私の答えを見てください。 –