Je parcourais les documents de convolution keras et j'ai trouvé deux types de convultuion Conv1D et Conv2D. J'ai fait quelques recherches sur le Web et c'est ce que je comprends à propos de Conv1D et Conv2D; Conv1D est utilisé pour les séquences et Conv2D utilise pour les images.
J'ai toujours pensé que les réseaux de convolution nerual étaient utilisés uniquement pour les images et visualisaient CNN de cette façon
Une image est considérée comme une grande matrice, puis un filtre glissera sur cette matrice et calculera le produit scalaire. Je crois que ce que Keras mentionne comme un Conv2D. Si Conv2D fonctionne de cette façon, alors quel est le mécanisme de Conv1D et comment pouvons-nous imaginer son mécanisme?
Réponses:
La convolution est une opération mathématique où vous "résumez" un tenseur ou une matrice ou un vecteur en un plus petit. Si votre matrice d'entrée est unidimensionnelle, vous résumez le long de celle des dimensions, et si un tenseur a n dimensions, vous pouvez résumer le long de toutes les n dimensions. Conv1D et Conv2D résument (convolvent) selon une ou deux dimensions.
Par exemple, vous pouvez convertir un vecteur en un vecteur plus court comme suit. Obtenir un vecteur "long" A avec n éléments et le convolutionner en utilisant le vecteur de poids a avec m éléments en un vecteur "court" (résumé) B avec n-m + 1 éléments: oùbje= ∑j = m - 10unei + j∗ wj i = [ 1 , n - m + 1 ]
Donc, si vous avez un vecteur de longueur n et que votre matrice de poids est également de longueur n , la convolution produira un scalaire ou un vecteur de longueur 1 égal à la valeur moyenne de toutes les valeurs de la matrice d'entrée. C'est une sorte de convolution dégénérée si vous le souhaitez. Si la même matrice de poids est plus courte que la matrice d'entrée, alors vous obtenez une moyenne mobile dans la sortie de longueur 2, etc.wje= 1 / n
Vous pouvez faire de même pour un tenseur (matrice) tridimensionnel de la même manière: oùbje k l= ∑j1= m1- 1j2= m2- 1j3= m4- 10unei + j1, k + j2, l + j3∗ wj1j2j3 i = [ 1 , n1- m1+ 1 ] , k = [ 1 , n2- m2+ 1 ] , l = [ 1 , n3- m3+ 1 ]
la source
Cette convolution 1d est moins coûteuse, elle fonctionne de la même manière mais suppose un tableau 1 dimension qui fait une multiplication avec les éléments. Si vous voulez visualiser pensez à une matrice de ligne ou de colonnes, c'est-à-dire une seule dimension lorsque nous multiplions, nous obtenons un tableau de même forme mais de valeurs inférieures ou supérieures, donc cela aide à maximiser ou minimiser l'intensité des valeurs.
Cette image pourrait vous aider,
Pour plus de détails, consultez https://www.youtube.com/watch?v=qVP574skyuM
la source
J'utiliserai une perspective Pytorch, cependant, la logique reste la même.
Lorsque vous utilisez Conv1d (), nous devons garder à l'esprit que nous allons très probablement travailler avec des entrées bidimensionnelles telles que des séquences d'ADN à codage à chaud ou des images en noir et blanc.
La seule différence entre le Conv2d () et le Conv1d () plus conventionnels est que ce dernier utilise un noyau à 1 dimension comme indiqué dans l'image ci-dessous.
Ici, la hauteur de vos données d'entrée devient la «profondeur» (ou in_channels), et nos lignes deviennent la taille du noyau. Par exemple,
Nous pouvons voir que le noyau s'étend automatiquement à la hauteur de l'image (tout comme dans Conv2d () la profondeur du noyau s'étend automatiquement sur les canaux de l'image) et donc tout ce qu'il nous reste à donner est la taille du noyau par rapport à la durée de les rangées.
Nous devons juste nous rappeler que si nous supposons une entrée bidimensionnelle, nos filtres deviennent nos colonnes et nos lignes deviennent la taille du noyau.
la source
Je voudrais expliquer la différence visuellement et en détail (commentaires dans le code) et dans une approche très très facile.
Vérifions d'abord le Conv2D dans TensorFlow .
Et le Conv1D est un cas spécial de Conv2D comme indiqué dans ce paragraphe du doc TensorFlow de Conv1D .
Voyons comment nous pouvons transférer Conv1D également un problème Conv2D. Puisque Conv1D est généralement utilisé dans les scénarios PNL, nous pouvons illustrer cela dans le problème ci-dessous PNL.
Faisons cela en utilisant Conv1D (également dans TensorFlow):
Nous pouvons voir que le 2D dans Conv2D signifie que chaque canal dans l'entrée et le filtre est bidimensionnel (comme nous le voyons dans l'exemple gif) et 1D dans Conv1D signifie que chaque canal dans l'entrée et le filtre est 1 dimensionnel (comme nous le voyons dans le chat et chien PNL exemple).
la source