2016-10-19 3 views
8

の仕組み: https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.pyKeras - 1Dコンボリューションそれはこの例から

は、以下のこのスニペットをしています。埋め込み層は、各例の400×50行列をバッチで出力します。私の質問は、1D畳み込みの仕組みですか? 400 x 50マトリックスではどのように機能しますか?畳み込みニューラルネットワーク(CNNs)において

# we start off with an efficient embedding layer which maps 
# our vocab indices into embedding_dims dimensions 
model.add(Embedding(max_features, 
        embedding_dims, 
        input_length=maxlen, 
        dropout=0.2)) 

# we add a Convolution1D, which will learn nb_filter 
# word group filters of size filter_length: 
model.add(Convolution1D(nb_filter=nb_filter, 
         filter_length=filter_length, 
         border_mode='valid', 
         activation='relu', 
         subsample_length=1)) 

答えて

8

、1Dおよび2Dフィルタが本当に1および2次元ではありません。説明のための規約です。

例では、各1Dフィルタは実際にはLx50フィルタです。ここで、Lはフィルタの長さのパラメータです。畳み込みは、1つの次元でのみ実行されます。それが1Dと呼ばれる理由かもしれません。したがって、適切なパディングを行うと、各1Dフィルタコンボリューションによって400x1ベクトルが得られます。 Convolution1Dレイヤーは最終的に400 * nb_filterの行列を出力します。

+0

これを、各ステップでの作成として、完全な埋め込みのためにドット積が行われるL単語(最初のL、次にスライドして単語2:2 + Lなどを含む)の内積として概念化できますか?値)のL単語のたびに? –

+1

はい、畳み込みの各出力値は、実際にはフィルタにL * 50を埋め込む値の内積です。 – pyan

関連する問題