学習の前に、入力とターゲットが常に指定の範囲内になるようにスケーリングすると役に立つことがよくあります。関数 mapminmax
は、入力とターゲットが範囲 [–1,1] に収まるようにスケーリングします。次のコードは、この関数の使用方法を説明しています。
[pn,ps] = mapminmax(p);
[tn,ts] = mapminmax(t);
net = train(net,pn,tn);
元のネットワークの入力とターゲットは、行列 p
および t
に指定されています。返される正規化された入力 pn
およびターゲット tn
は、すべて区間 [–1,1] に収まります。構造体 ps
および ts
は設定を含みます。この場合は、元の入力とターゲットの最小値と最大値です。ネットワークの学習が終わったら、設定 ps
を使用して、ネットワークに適用される将来の入力を変換する必要があります。これらは、ネットワークの重みおよびバイアスと同様に、実質的にネットワークの一部になります。
mapminmax
を使用してターゲットをスケーリングした場合、範囲 [–1,1] で出力を生成するようにネットワーク出力の学習が行われます。これらの出力を、元のターゲットに使用されたものと同じ単位に戻すには、設定 ts
を使用します。次のコードは、前のコードで学習が行われたネットワークのシミュレーションを行ってから、ネットワーク出力を元の単位に戻します。
an = sim(net,pn);
a = mapminmax('reverse',an,ts);
ネットワーク出力 an
は、正規化されたターゲット tn
に対応します。正規化されていないネットワーク出力 a
の単位は、元のターゲット t
と同じです。
mapminmax
を使用して学習セット データを前処理する場合、学習済みネットワークを新しい入力で使用する場合は常に、設定 ps
に格納されている、学習セットに対して計算された最小値と最大値で前処理しなければなりません。次のコードは、新しい一連の入力を学習済みのネットワークに適用します。
pnewn = mapminmax('apply',pnew,ps);
anewn = sim(net,pnewn);
anew = mapminmax('reverse',anewn,ts);
feedforwardnet
を含むほとんどのネットワークでは、これらのステップは自動的に行われるため、必要なのは sim
コマンドを使用することだけです。