畳み込みでさらに深く読む私は、さまざまなサイズの複数のテンソルの出力を組み合わせる提案された開始モジュールのビルディングブロックであるDepthConcatレイヤーに出くわしました。著者はこれを「フィルター連結」と呼んでいます。Torchの実装があるようですが、それが何をするのか私にはよくわかりません。誰かが簡単な言葉で説明できますか?
畳み込みでさらに深く読む私は、さまざまなサイズの複数のテンソルの出力を組み合わせる提案された開始モジュールのビルディングブロックであるDepthConcatレイヤーに出くわしました。著者はこれを「フィルター連結」と呼んでいます。Torchの実装があるようですが、それが何をするのか私にはよくわかりません。誰かが簡単な言葉で説明できますか?
回答:
inceptionモジュールの出力のサイズが異なるとは思いません。
畳み込み層の場合、人々はしばしば空間解像度を維持するためにパディングを使用します。
他の畳み込みレイヤーの中で右下のプーリングレイヤー(青いフレーム)は扱いにくいように見える場合があります。ただし、従来のプーリングサブサンプリングレイヤー(赤いフレーム、ストライド> 1)とは異なり、そのプーリングレイヤーではストライド1を使用していました。Stride-1プーリングレイヤーは、実際には畳み込みレイヤーと同じように機能しますが、畳み込み演算がmax演算に置き換えられています。
そのため、プーリングレイヤーの後の解像度も変更されず、プーリングレイヤーとたたみ込みレイヤーを「深さ」の次元で連結できます。
論文の上の図に示すように、開始モジュールは実際には空間分解能を維持します。
ホワイトペーパーと参照したリソースを読んで実装を手助けしたのと同じ質問を心に留めていました。
--[[ DepthConcat ]]--
-- Concatenates the output of Convolutions along the depth dimension
-- (nOutputFrame). This is used to implement the DepthConcat layer
-- of the Going deeper with convolutions paper :
ディープラーニングの「深さ」という言葉は少し曖昧です。幸いにも、このSO Answerはいくつかの明確さを提供します:
ディープニューラルネットワークでは、深さはネットワークの深さを指しますが、このコンテキストでは、深さは視覚認識に使用され、画像の3次元に変換されます。
この場合、画像があり、この入力のサイズは(幅、高さ、奥行き)である32x32x3です。深さがトレーニング画像の異なるチャネルに変換されるため、ニューラルネットワークはこのパラメーターに基づいて学習できる必要があります。
そのため、DepthConcatは、テンソルの最後の次元である深さ次元(この場合は3Dテンソルの3番目の次元)に沿ってテンソルを連結します。
Top コードが言うように、DepthConcatは深さ次元以外のすべての次元でテンソルを同じにする必要があります:
-- The normal Concat Module can't be used since the spatial dimensions
-- of tensors to be concatenated may have different values. To deal with
-- this, we select the largest spatial dimensions and add zero-padding
-- around the smaller dimensions.
例えば
A = tensor of size (14, 14, 2)
B = tensor of size (16, 16, 3)
result = DepthConcat([A, B])
where result with have a height of 16, a width of 16 and a depth of 5 (2 + 3).
上の図では、DepthConcat結果テンソルの画像が表示されています。ここで、白い領域はゼロパディングで、赤はAテンソル、緑はBテンソルです。
この例のDepthConcatの疑似コードは次のとおりです。
これが、同じ質問を同じホワイトペーパーを読んでいる他の誰かに役立つことを願っています。