回答:
私が見た画像を処理するCNNのすべての実装では、任意のレイヤーの出力は
Width x Height x Channels
またはいくつかの順列。これは入力と同じ次元数であり、畳み込み層によって追加の次元は追加されません。CNNレイヤーの出力の各フィーチャーマップチャネルは、複数の2Dカーネル(入力レイヤーの各チャネルに1つ)の結果を追加することによって作成された「平坦化された」2D配列です。
通常、グレースケールの入力画像でもWidth x Height x 1
、同じパターンに適合し、同じレイヤーモデルを使用できるように表現されることが期待されます。
標準の2D +チャンネル入力レイヤーを3D +チャンネルレイヤーに変換するレイヤーデザインを構築することは完全に実現可能です。これは私が以前に行ったことはありませんが、特定の問題に役立つ可能性があることを否定することはできません。
また、ビデオに適用されたCNNで3D +チャネルのたたみ込みが見られる場合もありますが、その場合、構造は次のようになります。
Width x Height x Frames x Channels
選択するフィルターの数によって異なります。64個のフィルターを選択したとします。
ウェイトテンソルの形状は[3、3、3、64](3番目の3は入力層のチャネル数、64は出力層のチャネル数)であり、バイアステンソルの形状[64]
Pad = "SAME"の場合、出力は224 * 224 * 3 = 224 * 224 * 64の入力画像のストライド1
Pad = "Valid"の場合、出力は224 * 224 * 3 = 221 * 221 * 64の入力画像に対してストライド1
これで221 * 221 * 64の入力により、次のレイヤーで128のフィルターを作成する場合、-重みベクトル形状は[3、3、64、128]となり、-バイアスvecotr形状は[128]となります。
および出力形状-パッド= "SAME"の場合[221、221、128]-パッド= "有効"の場合[198、198、128]ストライド= [1,1,1,1]を考慮
これらの結果は、layername.get_shape()を使用してグラフを作成するときに確認できます。
深層学習における畳み込みの出力次元は複数の要因に依存します
最も単純な依存関係は、フィルターの数への依存ですN
。出力に含まれる機能マップの数が表示されます。RGBチャネル、つまり3の入力の場合、出力の場合、この数は自由に選択できます。
次の要素はゼロパディングです。(3,3)のフィルターサイズと「有効な」パディングを使用する場合、つまり画像の周囲にゼロを追加しないと、dimensionの出力になります。
(100, 100, 3) -> (98, 98, N)
1のストライドを使用しているため、画像の端にある画像を横切って各方向にフィルターを移動すると、98ステップ後にフィルターが境界にぶつかります。
ただし、「SAME」パディングを使用する場合は、フィルターサイズを補正します(フィルターサイズが(3,3)で、画像の周りのゼロの1行に対応する場合)。
(100, 100, 3) -> (100, 100, N)
たとえば、ストライドが2の場合、フィルターの位置を2ピクセルシフトします。したがって、あなたは得る
(100, 100, 3) -> (50, 50, N)
RGBの3つのチャネルは、異なるカーネルによって畳み込まれ、各機能マップに追加されます。したがって、出力の最初のレイヤーとして100 x 100 x Nになります。