web-dev-qa-db-ja.com

Keras conv1dレイヤーパラメーター:filtersおよびkernel_size

私は、kerasのconv1dレイヤーのこれら2つのパラメーターに非常に混乱しています: https://keras.io/layers/convolutional/#conv1d

ドキュメントは言う:

filters: Integer, the dimensionality of the output space (i.e. the number output of filters in the convolution).
kernel_size: An integer or Tuple/list of a single integer, specifying the length of the 1D convolution window.

しかし、これは https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner 's-Guide-Toなどの多くのチュートリアルで見られる標準的な用語とは関係がないようです。 -Understanding-Convolutional-Neural-Networks /および https://machinelearningmastery.com/sequence-classification-lstm-recurrent-neural-networks-python-keras/

Kerasを使用する2番目のチュートリアルリンクを使用すると、実際には「kernel_size」は、入力フィーチャスペースのスライディングウィンドウを定義する従来の「フィルター」の概念に関連していると思います。しかし、conv1dの「フィルター」パラメーターはどうでしょうか。それは何をするためのものか?

たとえば、次のコードスニペットでは:

model.add(embedding_layer)
model.add(Dropout(0.2))
model.add(Conv1D(filters=100, kernel_size=4, padding='same', activation='relu'))

埋め込み層が次元50(行、各行は文の単語)x 300(列、単語ベクトル次元)のマトリックスを出力すると仮定すると、conv1dレイヤーはどのようにそのマトリックスを変換しますか?

どうもありがとう

24
Ziqi

kernel_sizeはスライディングウィンドウのサイズを定義すると言うのは正しいことです。

filtersパラメーターは、使用するウィンドウの数です。 (それらはすべて同じ長さで、kernel_sizeです)。生成するさまざまな結果またはチャネルの数。

filters=100kernel_size=4を使用すると、それぞれ長さ4の100の異なるフィルターを作成します。結果は100の異なる畳み込みをもたらします。

また、各フィルターには、すべての入力チャンネルを考慮するのに十分なパラメーターがあります。


Conv1Dレイヤーは次の寸法を想定しています。

(batchSize, length, channels)

私はそれを使用する最良の方法は、長さ次元の単語数を持っていることであり(順番に単語が文を形成したかのように)、チャネルは埋め込みの出力次元(1つの単語を定義する数)であると思います。

そう:

batchSize = number of sentences    
length = number of words in each sentence   
channels = dimension of the embedding's output.    

畳み込み層は100個の異なるフィルターを通過し、各フィルターはlength次元(Word by Word、4グループ)に沿ってスライドし、Wordを定義するすべてのチャネルを考慮します。

出力の形は次のとおりです。

(number of sentences, 50 words, 100 output dimension or filters)   

フィルターの形状は次のとおりです。

(4 = length, 300 = Word vector dimension, 100 output dimension of the convolution)  
33
Daniel Möller