2016-11-30 6 views
2

this blogには、VGG16ネットワークを構築するためのコードセグメントが含まれています。私はmodel.add(ZeroPadding2D((1, 1), batch_input_shape=(1, 3, img_width, img_height)))に関連するコードKeracを使用してVGG16の最初の入力層を構築することについて

model = Sequential() 
model.add(ZeroPadding2D((1, 1), batch_input_shape=(1, 3, img_width, img_height))) 
first_layer = model.layers[-1] 
# this is a placeholder tensor that will contain our generated images 
input_img = first_layer.input 

の以下の部分に関するいくつかの質問があり、我々が通常の入力として、第一層の読み取り画像を構築するためにZeroPadding2Dを使用することを常に本当ですか? (1,1)は入力 のパラメータがZeroPadding2Dであることを示します。これはKerasの文書によれば、行と列の両方に1のゼロを追加することを意味します。どのくらいの数のゼロを追加するかを決めるには?

第二に、なぜ-1first_layer = model.layers[-1]に設定する必要がありますか?ここでは、代わりに0でなければならないのは1つのレイヤーだけです。

答えて

4

通常、私たちは最初のレイヤー読み込みイメージを入力として構築するためにZeroPadding2Dを使用していますか?

に依存します。この特定のコードでは、著者は入力画像と同様にの幅と高さで画像の特徴を出力する3x3畳み込みを行うつもりです。これは、入力イメージのサイズが2の累乗である場合によく発生します。なぜなら、2x2のプール層の数を維持したいからです。パディングなし

:パディング付き

128x128 -[3x3 conv]-> 126x126 -[2x2 pool]-> 63x63 -[3x3 conv]-> 61x61 -> *how to pool next?* 

128x128 -[pad 1]-> 130x130 -[3x3 conv]-> 128x128 -[2x2 pool]-> 64x64 
-[pad+conv+pool]-> 32x32 -[...]-> 16x16 -> 8x8 ... 

(1,1)ZeroPadding2Dの入力パラメータに何を示していますか?

入力イメージが128 * 128の場合、(1,1)ゼロ埋め込みでは、1ピクセル幅の黒いフレームが追加された130x130イメージが作成されます。 (1,1)は、水平/垂直エッジでそれぞれ追加するピクセル数を示します。

  o o o o o 
x x x  o x x x o 
x x x -> o x x x o 
x x x  o x x x o 
      o o o o o 

あなたは意図5x5の畳み込みを使用して画像のサイズを維持する場合は、(2,2)パディングが必要になります。

なぜfirst_layer = model.layers [-1]に-1を設定する必要がありますか?

正確なインデックス作成を使用しても問題ありません。ただし、最初の畳み込みレイヤーの下に前処理レイヤーを追加することにした場合は、[-1]インデックスを変更する必要はありません。あなたが忘れた場合のバグを減らします。

+0

非常に詳細な説明をありがとうございます。 – user785099

関連する問題