Keras Convolution2d()で使用されるデフォルトのフィルターは何ですか?


18

私はニューラルネットワークにかなり慣れていますが、線形代数と畳み込みの数学をかなりよく理解しています。

MNISTデータを使用してKeras畳み込みNNをトレーニングして数字を認識するために、ネット上のさまざまな場所で見つけたサンプルコードを理解しようとしています。私の期待は、畳み込み層を作成するときに、入力に適用するフィルターまたはフィルターのセットを指定する必要があることです。しかし、私が見つけた3つのサンプルはすべて、次のような畳み込み層を作成します。

model.add(Convolution2D(nb_filter = 32, nb_row = 3, nb_col = 3,
                        border_mode='valid',
                        input_shape=input_shape))

これは、CNNによって処理された画像に合計32個の3x3フィルターを適用しているようです。しかし、それらのフィルターは何ですか?それらを数学的にどのように説明しますか?kerasのドキュメントは役に立ちません。

前もって感謝します、


2
これは、CNNの畳み込み部分を理解することから得られます。あなたはここで読むことができます: cs231n.github.io/convolutional-networks
クリスチャンSafka

回答:


15

既定では、フィルターは、以下のように記述された正と負の境界を持つ均一分布から値を描画する方法を使用してランダムに初期化されます Wglorot_uniform

WU(6nin+nout,6nin+nout),

ここで、はこのユニットに供給されるユニットの数であり、はこの結果が供給されるユニットの数です。ninnout

ネットワークを使用して予測を行う場合、これらのフィルターはネットワークの各レイヤーに適用されます。つまり、各入力画像の各フィルターに対して個別の畳み込みが実行され、これらの畳み込みの結果が畳み込みの次のレイヤー(または完全に接続されたレイヤー、またはその他のレイヤー)に送られます。

トレーニング中、フィルターの値は、損失関数に関して逆伝播で最適化されます。数字の認識などの分類タスクでは、通常、クロスエントロピー損失が使用されます。畳み込みネットワークの最初の層で学習したフィルター(上)と2番目の層で学習したフィルター(下)の視覚化を次に示します。

コンバージョンネットフィルターの視覚化

ご覧のとおり、最初のレイヤーフィルターは基本的にすべて単純なエッジ検出器として機能しますが、2番目のレイヤーフィルターはより複雑です。ネットワークを深く掘り下げると、フィルターはより複雑な形状を検出できます。ただし、これらのフィルターは既に何度も畳み込まれた画像に作用し、おそらく元の自然な画像とはあまり似ていないため、視覚化するのは少し難しくなります。


5
glorot_uniform正規分布を使用しません。あなたが説明していると思いますglorot_normal。答えにとってそれほど重要なことではないと思います-重要なポイントはランダムな初期化とそれに続くトレーニングの効果です。トレーニングされたフィルターが、エッジ/コーナーなどのフィルターのように見える方法を説明する価値があるかもしれません(トレーニング前/後の最初のレイヤーフィルターの古典的なイメージの1つが含まれている可能性があります)。
ニールスレーター

ティム、数学を提供してくれてありがとう。@Neil Slater-バックプロパゲーションでトレーニングした後、フィルターがエッジ検出などのように見える可能性があるというあなたの洞察は非常に役に立ちました。もっと評判が良ければ、両方の貢献を+1します。
-ChrisFal

@NeilSlaterあなたのコメントをありがとう-あなたは正しい、私は混乱glorot_normalしていglorot_uniformました、そして、私はこれを反映するために答えを更新しました。あなたが提案したように、フィルターがどうなるかについての追加情報も少し追加しました。
timleathart

6

これらは畳み込みカーネルです。たとえば、イメージは5x5で、32個の3x3コンボリューションカーネルます。border_modeは「有効」で、入力の周囲にパディングがないため、ピクセル(i、0)、(0、j)、(i、4)、(4、j)は失われます。したがって、結果は32個の3x3画像、(i = 1,2,3、j = 1,2,3)であり、各結果画像は畳み込みによって定義されます: 、F 、K BのKI J BのKI J = FのK * A I J = Σ L = 0 1 2 Σ M = 0 1 2のF KL m A i l j AFkBk(i,j)

Bk(i,j)=(FkA)(i,j)=l=0,1,2m=0,1,2Fk(l,m)A(il,jm)

ここに画像の説明を入力してください

tranedモデルは、コスト関数に従ってカーネルをトレーニングします。最終的に、これらのカーネルはモデルのフィルターです。


私はこの数学を理解しましたが、このスレッドの多くの読者はこの図が役立つと確信しています。ほんとありがと!
クリスファル

imghost.in/images/2018/03/06/XvatD.jpg画像はBの座標(0,0)である必要がありますか?
vinnitu

@vinnituはい、確かに。実際には、BをBk(i、j)に変更する必要もあります(i = 0,1,2、j = 0,1,2)。
lucky6qi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.