MLの旅を始めたばかりで、いくつかのチュートリアルを行いました。 (私にとって)はっきりしないことの1つは、Keras Conv2Dの「フィルター」パラメーターがどのように決定されるかです。
私が読んだほとんどの情報源は、説明なしで単にパラメーターを32に設定しました。これは単なる経験則なのでしょうか、それとも入力画像の大きさが関係していますか?たとえば、CIFAR-10の画像は32x32です
具体的には:
model = Sequential()
filters = 32
model.add(Conv2D(filters, (3, 3), padding='same', input_shape=x_train.shape[1:]))
model.add(Activation('relu'))
model.add(Conv2D(filters, (3, 3)))
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))
次のレイヤーには、filter * 2または64のフィルターパラメーターがあります。これも、どのように計算されますか?
Tx。
ジョー
実際、あなたの質問に対する良い答えはありません。ほとんどのアーキテクチャは通常、多くの実験中に慎重に設計され、微調整されます。独自のアーキテクチャを設計する際に適用すべき経験則のいくつかを共有できます。
最初のレイヤーのdimension collapseを避けます。入力フィルターにRGB
の(n, n)
空間形状があると仮定しましょう画像。この場合、フィルター番号をn * n * 3
より大きく設定することをお勧めします。これは単一フィルターの入力の次元数です。小さい数値を設定すると、初期化によって有益な情報が失われ、画像に関する多くの有用な情報が失われる可能性があります。もちろん-これは一般的なルールではありません-例えば画像の複雑度が低いテクスチャ認識の場合-少数のフィルターが実際に役立つ可能性があります。
フィルター数よりもボリュームについて考える-フィルターの数を設定するときは、連続するレイヤー間でフィルター番号を変更するのではなく、ボリュームの変化を考慮することが重要です。例えば。 VGG
-レイヤーをプールした後、フィルターの数が2倍になった場合でも、プーリングにより4
の係数でフィーチャマップが減少するため、実際のフィーチャマップのボリュームは2倍減少します。通常、ボリュームのサイズを3つ以上減らすことは、悪い習慣と見なされるべきです。現代のアーキテクチャのほとんどは、1〜2の範囲のボリュームドロップファクターを使用しています。それでも、これは一般的なルールではありません。狭い階層の場合-ボリュームドロップの大きな値が実際に役立つ場合があります。
ボトルネックを回避。このマイルストーンで読むことができるように、 paper ボトルネックはトレーニングプロセスに深刻な悪影響を与える可能性があります。ボリュームのドロップが重すぎる場合に発生します。もちろん-これはまだ達成されるかもしれません-しかし、その後、あなたは、例えば、使用されるインテリジェントなダウンサンプリングを使用する必要がありますInception v>2
Check 1x1 convolutions-フィルターのアクティブ化は非常に相関していると考えられています。 1x1 convolutions-つまり、フィルターサイズ1の畳み込みを使用することで、この利点を活用できます。 pooling
またはインテリジェントなダウンサンプリングの代わりに、それらによってボリュームがドロップされます(例を参照してください here )。あなたは例えばさらに2倍のフィルターを作成し、1x1のコンバージョンを連続レイヤーとして使用して、25%をカットします。
ご覧のとおり。フィルタの数を選択する簡単な方法はありません。上記のヒントを除き、フィルターの数に関する私のお気に入りの健全性チェックの1つを共有したいと思います。 2つの簡単な手順が必要です。
通常-フィルターの数が少なすぎる場合(一般的に)-これら2つのテストはそれを示します。トレーニングプロセス中に-正規化を使用して-ネットワークが大幅にオーバーフィットする場合-これは、ネットワークのフィルターが多すぎることを示す明確な指標です。
乾杯。
フィルターの数は、タスクの複雑さに基づいて選択されます。より複雑なタスクには、より多くのフィルターが必要です。通常、すべてのレイヤーの後にフィルターの数が増えます(例:128 -> 256 -> 512
)。最初のレイヤー(フィルターの数が少ない)は画像のいくつかの単純な機能(エッジ、色調など)のいくつかをキャッチし、次のレイヤーは単純な機能に基づいてより複雑な機能を取得しようとしています。
スタンフォード大学から ナイスコース があり、CNNの直感と理解が得られます。