Main Content

adapt

シミュレーション時のニューラル ネットワークのデータへの適応

構文

[net,Y,E,Pf,Af,tr] = adapt(net,P,T,Pi,Ai)

ヘルプの表示

help network/adapt と入力します。

説明

この関数は、入力が与えられるたびに、ネットワーク出力と誤差を計算します。

[net,Y,E,Pf,Af,tr] = adapt(net,P,T,Pi,Ai) は、次の引数を取ります。

net

ネットワーク

P

ネットワークの入力

T

ネットワークのターゲット (既定値 = ゼロ配列)

Pi

入力遅延の初期条件 (既定値 = ゼロ配列)

Ai

層遅延の初期条件 (既定値 = ゼロ配列)

適応パラメーター net.adaptParam を使用して適応関数 net.adaptFcn を適用した後、以下を返します。

net

更新されたネットワーク

Y

ネットワークの出力

E

ネットワーク誤差

Pf

最終の入力遅延条件

Af

最終の層遅延条件

tr

学習記録 (epoch および perf)

T はオプションで、ターゲットを必要とするネットワークにのみ必要であることに注意してください。Pi および Pf もオプションで、入力または層の遅延があるネットワークにのみ使用する必要があります。

adapt の信号引数には、cell 配列と行列の 2 つの形式があります。

cell 配列形式は、記述が最も簡単です。これは複数の入出力があるネットワークの場合に非常に便利で、入力をシーケンスで与えることができます。

P

NiTS 列の cell 配列

各要素 P{i,ts} は、RiQ 列の行列。

T

NtTS 列の cell 配列

各要素 T{i,ts} は、ViQ 列の行列。

Pi

NiID 列の cell 配列

各要素 Pi{i,k} は、RiQ 列の行列。

Ai

NlLD 列の cell 配列

各要素 Ai{i,k} は、SiQ 列の行列。

Y

NoTS 列の cell 配列

各要素 Y{i,ts} は、UiQ 列の行列。

E

NoTS 列の cell 配列

各要素 E{i,ts} は、UiQ 列の行列。

Pf

NiID 列の cell 配列

各要素 Pf{i,k} は、RiQ 列の行列。

Af

NlLD 列の cell 配列

各要素 Af{i,k} は、SiQ 列の行列。

ここで、

Ni =net.numInputs
Nl =net.numLayers
No =net.numOutputs
ID =net.numInputDelays
LD =net.numLayerDelays
TS =

タイム ステップ数

Q =

バッチのサイズ

Ri =net.inputs{i}.size
Si =net.layers{i}.size
Ui =net.outputs{i}.size

PiPfAi、および Af の列は、最も古い遅延条件から最新の遅延条件まで順に並べられます。

Pi{i,k} =

時間 ts = k - ID の入力 i

Pf{i,k} =

時間 ts = TS + k - ID の入力 i

Ai{i,k} =

時間 ts = k - LD の層出力 i

Af{i,k} =

時間 ts = TS + k - LD の層出力 i

行列形式は、1 タイム ステップのみのシミュレーションが行われる (TS = 1) 場合に使用できます。これは入出力が 1 つしかないネットワークの場合に便利ですが、複数の入出力があるネットワークにも使用できます。

行列の各引数は、対応する cell 配列引数の要素を単一の行列に格納することによって求められます。

P

(sum of Ri) 行 Q 列の行列

T

(sum of Vi) 行 Q 列の行列

Pi

(sum of Ri) 行 (ID*Q) 列の行列

Ai

(sum of Si) 行 (LD*Q) 列の行列

Y

(sum of Ui) 行 Q 列の行列

E

(sum of Ui) 行 Q 列の行列

Pf

(sum of Ri) 行 (ID*Q) 列の行列

Af

(sum of Si) 行 (LD*Q) 列の行列

12 ステップの 2 つのシーケンス (ただし、T1P1 に依存することは既知とする) を使用して、フィルターの操作を定義します。

p1 = {-1  0 1 0 1 1 -1  0 -1 1 0 1};
t1 = {-1 -1 1 1 1 2  0 -1 -1 0 1 1};

linearlayer を使用して、入力範囲が [-1 1] で、1 つのニューロンを持ち、入力遅延が 0 と 1、学習率が 0.1 の層を作成します。その後、この線形層をシミュレートします。

net = linearlayer([0 1],0.1);

ここでネットワークを、シーケンスを一巡する 1 回のパスについて適応させます。

ネットワークの平均二乗誤差が表示されます (これは adapt の最初の呼び出しであるため、既定の Pi が使用されます)。

[net,y,e,pf] = adapt(net,p1,t1);
mse(e)

誤差がかなり大きいことがわかります。別の 12 タイム ステップに対してネットワークを適応させます (新しい初期遅延条件として前の Pf を使用)。

p2 = {1 -1 -1 1 1 -1  0 0 0 1 -1 -1};
t2 = {2  0 -2 0 2  0 -1 0 0 1  0 -1};
[net,y,e,pf] = adapt(net,p2,t2,pf);
mse(e)

ここでネットワークを、シーケンス全体を一巡する 100 のパスについて適応させます。

p3 = [p1 p2];
t3 = [t1 t2];
for i = 1:100
  [net,y,e] = adapt(net,p3,t3);
end
mse(e)

シーケンスの 100 回のパスを実行した後、誤差は非常に小さくなります。ネットワークは、入力信号とターゲット信号の間の関係に適応しています。

アルゴリズム

adapt は、net.adaptParam が示す適応パラメーター値を使用して、net.adaptFcn が示す関数を呼び出します。

TS 個のステップをもつ入力シーケンスが与えられると、ネットワークは次のように更新されます。入力シーケンスの各ステップが一度に 1 つずつネットワークに提示されます。各ステップの後、シーケンスの次のステップが与えられる前にネットワークの重みとバイアスの値が更新されます。このようにして、ネットワークは TS 回更新されます。

バージョン履歴

R2006a より前に導入

参考

| | |