画像の二項分類のCNNでは、出力の形状は(画像の数、1)または(画像の数、2)のどちらにする必要がありますか?具体的には、CNNの最後のレイヤーは次の2種類です。
keras.layers.Dense(2, activation = 'softmax')(previousLayer)
または
keras.layers.Dense(1, activation = 'softmax')(previousLayer)
最初のケースでは、すべての画像に対して2つの出力値があります(グループ1に属する確率とグループ2に属する確率)。 2番目のケースでは、各画像の出力値は1つだけです。これは、そのラベルです(0または1、label = 1は、グループ1に属することを意味します)。
どちらが正しいか?本質的な違いはありますか?これらの画像内のオブジェクトを認識したくありません。2つのグループに分けてください。
どうもありがとう!
この最初のものは正しい解決策です:
keras.layers.Dense(2, activation = 'softmax')(previousLayer)
通常、softmax
活性化関数を使用して分類タスクを実行し、出力幅はカテゴリの数になります。つまり、1つのオブジェクトをラベルA
、B
、またはC
の3つのカテゴリに分類する場合は、Dense
を作成する必要があります。レイヤーは、(None, 3)
の形状の出力を生成します。次に、cross_entropy
loss関数を使用してLOSS
を計算し、勾配を自動的に計算して、バックプロパゲーションプロセスを実行できます。
Dense
レイヤーで1つの値のみを生成する場合、つまり(None, 1)
の形状のテンソルを取得するため、regression
のような単一の数値が生成されます。仕事。カテゴリを表すために出力の値を使用しています。答えは正しいですが、classification
タスクの一般的な解決策のようには機能しません。
違いは、クラス確率が互いに独立しているかどうか(マルチラベル分類)です。
2つのクラスがあり、通常はP(c=1) + P(c=0) = 1
がある場合
_keras.layers.Dense(2, activation = 'softmax')
keras.layers.Dense(1, activation = 'sigmoid')
_
どちらもクラス確率の点で正しいです。唯一の違いは、トレーニング中にラベルを提供する方法です。だが
_keras.layers.Dense(2, activation = 'sigmoid')
_
その文脈では正しくありません。ただし、P(c=1) + P(c=0) != 1
がある場合は、正しい実装です。これは、インスタンスが複数の正しいクラスに属している可能性があるマルチラベル分類の場合です。