2016-05-08 16 views
9

ベローは、Kerasのドキュメントのサンプルコードです。最初の畳み込みが3つのカラーチャネルを持つ256x256イメージを受け入れるように見えます。それは64の出力フィルタを持っています(私はこれが他の場所で読んだフィーチャマップと同じだと思います)。私が混乱しているのは、出力サイズが(None、64、256、256)であるということです。色チャンネルのそれぞれに畳み込みを行う必要があるので、(None、64 * 3、256、256)になると思います。私が疑問に思うのは、Kerasがカラーチャンネルをどのようにハンドリングするかということです。畳み込みを通過する前に、値は平均化されてグレースケールに変換されますか?Keras畳み込みレイヤーはカラーチャンネルで何をしますか?

# apply a 3x3 convolution with 64 output filters on a 256x256 image: 
model = Sequential() 
model.add(Convolution2D(64, 3, 3, border_mode='same', input_shape=(3, 256, 256))) 
# now model.output_shape == (None, 64, 256, 256) 

# add a 3x3 convolution on top, with 32 output filters: 
model.add(Convolution2D(32, 3, 3, border_mode='same')) 
# now model.output_shape == (None, 32, 256, 256) 

答えて

5

3つの入力チャネルを有するサイズ3×3のフィルタは、3×3×3のパラメータから成るので、各チャネルのコンボリューションカーネルの重みが異なっています。

出力を得るために、各チャネルの畳み込み結果を(おそらくバイアス項とともに)合計します。出力形状は(None、64 * 3、256、256)ではなく、(None、64、256、256)など入力チャンネルの数に依存しません。

私は100%は確信していませんが、フィーチャマップはそのようなフィルタを入力に適用した場合の出力を指していると思います(たとえば256 * 256行列)。

関連する問題