Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

crossentropy

ニューラル ネットワーク性能

説明

perf = crossentropy(net,targets,outputs,perfWeights) は、オプションの性能の重みとその他のパラメーターを使用して、特定のターゲットと出力でのネットワーク性能を計算します。この関数は、極端に不正確な出力 (y1-t に近い) には厳しいペナルティを課し、ほぼ正しい分類 (yt に近い) にはほとんどペナルティを課さない結果を返します。交差エントロピーを最小化すると、適切な分類器が得られます。

出力要素とターゲット要素の各ペアの交差エントロピーは、ce = -t .* log(y) のように計算されます。

総合的な交差エントロピー性能は個々の値の平均であり、perf = sum(ce(:))/numel(ce) のように求められます。

特殊なケース (N = 1): 出力が 1 つの要素のみで構成されている場合、出力とターゲットはバイナリ符号化として解釈されます。つまり、2 つのクラスがあり、ターゲットは 0 と 1 です。一方、N 個中 1 個の符号化では、2 つ以上のクラスがあります。バイナリ交差エントロピーの式は、ce = -t .* log(y) - (1-t) .* log(1-y) です。

perf = crossentropy(___,Name,Value) は、指定された名前と値のペアの引数に従ってカスタマイズをサポートします。

すべて折りたたむ

この例では、交差エントロピーと 0.1 の正則化を使用して分類ネットワークを設計した後、データセット全体について性能を計算する方法を示します。

この例では、学習時に crossentropy を使用するようにネットワークを設定する方法を示します。

net = feedforwardnet(10);
net.performFcn = 'crossentropy';
net.performParam.regularization = 0.1;
net.performParam.normalization = 'none';

入力引数

すべて折りたたむ

ニューラル ネットワーク。ネットワーク オブジェクトとして指定します。

例: net = feedforwardnet(10);

ニューラル ネットワークのターゲット値。数値の行列または cell 配列として指定します。ネットワークのターゲット値は、目標の出力を定義します。このターゲット値は、Q 個の N 要素ベクトルの NQ 列の行列、または各要素が NiQ 列の行列である MTS 列の cell 配列として指定できます。これらのケースでは、N または Ni はベクトル長、Q は標本の数、M は複数の出力があるニューラル ネットワークの信号の数、TS は時系列データのタイム ステップの数を示します。targets の次元は outputs と同じでなければなりません。

ターゲット行列の列は、その列ベクトルで表されるクラスの位置に 1 が 1 つあり、残りはすべて 0 で構成されます。N = 1 の場合、バイナリ符号化用の交差エントロピーが使用されます。そうでない場合、N 個中 1 個の符号化用の交差エントロピーが使用されます。NaN 値を使用して、不明な出力値または don't-care 出力値を示すことができます。NaN ターゲット値の性能は無視されます。

データ型: double | cell

ニューラル ネットワークの出力値。数値の行列または cell 配列として指定します。ネットワークの出力値は、Q 個の N 要素ベクトルの NQ 列の行列、または各要素が NiQ 列の行列である MTS 列の cell 配列として指定できます。これらのケースでは、N または Ni はベクトル長、Q は標本の数、M は複数の出力があるニューラル ネットワークの信号の数、TS は時系列データのタイム ステップの数を示します。outputs の次元は targets と同じでなければなりません。

出力に不明な出力値を示す NaN が含まれる場合があります。この出力値は、(同様に不明な値または don't-care 値を表す) NaN 入力値の結果として生成されたと推定されます。NaN 出力値の性能は無視されます。

一般的なケース (N>=2): 出力行列の列は、クラス メンバーシップの推定値を表し、合計が 1 にならなければなりません。伝達関数 softmax を使用して、このような出力値を生成できます。patternnet を使用して、ソフトマックス出力層で交差エントロピー性能を使用するように設定済みのネットワークを作成します。

データ型: double | cell

性能の重み。数値のベクトルまたは cell 配列として指定します。性能の重みは、各ターゲット値に関連付けられた各性能値の重要度を 0 ~ 1 の値を使用して定義するオプションの引数です。性能値が 0 の場合はターゲットを無視することを、値が 1 の場合はターゲットを通常の重要度で扱うことを示します。0 ~ 1 の値を使用すると、相対的な重要度でターゲットを扱うことができます。

性能の重みには数多くの用途があります。分類問題に使用すると、利益 (またはコスト) が比較的大きい分類 (または誤分類) を示すことができるので便利です。一部のタイム ステップ (最後のタイム ステップなど) で正しい出力を得ることが他のタイム ステップと比べて重要である時系列問題にも役立てることができます。性能の重みを使用すると、そのターゲットの精度が非常に高いことがわかっている標本にニューラル ネットワークを当てはめ、精度が低いことがわかっているターゲットの重要度を低くすることもできます。

perfWeights の次元は targets および outputs と同じにすることができます。または、性能の重みの各次元を targets および outputs の次元と一致させるか、1 にすることもできます。たとえば、targetsN 要素ベクトルの Q 個の標本を定義する NQ 列の行列である場合、性能の重みは、各ターゲット値について異なる重要度を示す NQ 列の行列、ターゲットの各行に対して異なる重要度を定義する N1 列の行列、各標本について異なる重要度を示す 1Q 列の行列、またはすべてのターゲット値について同じ重要度を示すスカラー 1 (1 行 1 列) にすることができます。

同様に、outputs および targets が行列の cell 配列である場合、perfWeights は、同じサイズの cell 配列、行 cell 配列 (各タイム ステップの相対的な重要度を示す)、列 cell 配列 (各ニューラル ネットワーク出力の相対的な重要度を示す)、あるいは 1 つの行列の cell 配列または行列のみ (どちらの場合もすべての行列の重要度の値が同じであることを示す) になります。

どの問題でも、perfWeights の値が {1} (既定) またはスカラー 1 の場合、すべての性能の重要度が等しいことを示します。

データ型: double | cell

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'normalization','standard' は、入力とターゲットが範囲 (-1,+1) に正規化されるように指定します。

重み/バイアス値に起因する性能の比率。0 (既定) と 1 の間の double として指定します。値を大きくすると、ネットワークに大きな重みに対するペナルティが課され、ネットワーク関数で過適合を回避できる可能性が高くなります。

例: 'regularization',0

データ型: single | double

出力、ターゲット、誤差の正規化モード。'none''standard'、または 'percent' として指定します。'none' を指定すると、正規化が実行されません。'standard' を指定すると、出力とターゲットが (-1, +1) に正規化され、それにより誤差は (-2, +2) に正規化されます。'percent' を指定すると、出力とターゲットが (-0.5, 0.5)、誤差が (-1, 1) に正規化されます。

例: 'normalization','standard'

データ型: char

出力引数

すべて折りたたむ

ネットワーク性能。範囲 (0,1) の double として返されます。

バージョン履歴

R2013b で導入

参考

| | | | |