web-dev-qa-db-fra.com

Paramètres de couche Keras conv1d: filtres et taille de noyau

Je suis très confus par ces deux paramètres dans la couche conv1d de keras: https://keras.io/layers/convolutional/#conv1d

la documentation dit:

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.

Mais cela ne semble pas se rapporter aux terminologies standard que je vois dans de nombreux tutoriels tels que https://adeshpande3.github.io/adeshpande3.github.io/A-Beginner 's-Guide-To -Understanding-Convolutional-Neural-Networks/and https://machinelearningmastery.com/sequence-classification-lstm-recurrent-neural-networks-python-keras/

En utilisant le deuxième lien du didacticiel, qui utilise Keras, j'imagine qu'en réalité, "taille-noyau" est pertinent pour le concept classique de "filtre", qui définit la fenêtre glissante sur l'espace des fonctions en entrée. Mais qu'en est-il du paramètre 'filter' dans conv1d? Qu'est ce que ça fait?

Par exemple, dans l'extrait de code suivant:

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

supposons que la couche d’incorporation génère une matrice de dimension 50 (chaque ligne est un mot dans une phrase) x 300 (colonnes, dimension du vecteur Word), comment la couche conv1d transforme-t-elle cette matrice?

Merci beaucoup

24
Ziqi

Vous avez raison de dire que kernel_size définit la taille de la fenêtre glissante.

Les paramètres filters correspondent au nombre de fenêtres que vous aurez. (Tous avec la même longueur, qui est kernel_size). Combien de résultats différents ou de canaux que vous souhaitez produire.

Quand vous utilisez filters=100 et kernel_size=4, vous créez 100 filtres différents, chacun avec une longueur de 4. Le résultat vous apportera 100 convolutions différentes.

De plus, chaque filtre a suffisamment de paramètres pour prendre en compte tous les canaux d’entrée.


La couche Conv1D attend ces dimensions:

(batchSize, length, channels)

Je suppose que la meilleure façon de l’utiliser est d’avoir le nombre de mots dans la dimension de longueur (comme si les mots dans l’ordre formaient une phrase) et les canaux comme la dimension de sortie de l’incorporation (nombres définissant un mot).

Alors:

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

La couche convolutionnelle passera par 100 filtres différents, chaque filtre glissant le long de la dimension length (Word par Word, par groupe de 4), en tenant compte de tous les canaux qui définissent le mot.

Les sorties ont la forme suivante:

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

Les filtres ont la forme suivante:

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