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 | 学習記録 ( |
T
はオプションで、ターゲットを必要とするネットワークにのみ必要であることに注意してください。Pi
および Pf
もオプションで、入力または層の遅延があるネットワークにのみ使用する必要があります。
adapt
の信号引数には、cell 配列と行列の 2 つの形式があります。
cell 配列形式は、記述が最も簡単です。これは複数の入出力があるネットワークの場合に非常に便利で、入力をシーケンスで与えることができます。
P |
| 各要素 |
T |
| 各要素 |
Pi |
| 各要素 |
Ai |
| 各要素 |
Y |
| 各要素 |
E |
| 各要素 |
Pf |
| 各要素 |
Af |
| 各要素 |
ここで、
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 |
Pi
、Pf
、Ai
、および Af
の列は、最も古い遅延条件から最新の遅延条件まで順に並べられます。
Pi{i,k} | = | 時間 |
Pf{i,k} | = | 時間 |
Ai{i,k} | = | 時間 |
Af{i,k} | = | 時間 |
行列形式は、1 タイム ステップのみのシミュレーションが行われる (TS = 1
) 場合に使用できます。これは入出力が 1 つしかないネットワークの場合に便利ですが、複数の入出力があるネットワークにも使用できます。
行列の各引数は、対応する cell 配列引数の要素を単一の行列に格納することによって求められます。
P | ( |
T | ( |
Pi | ( |
Ai | ( |
Y | ( |
E | ( |
Pf | ( |
Af | ( |
例
12 ステップの 2 つのシーケンス (ただし、T1
が P1
に依存することは既知とする) を使用して、フィルターの操作を定義します。
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 より前に導入