Was ist der Unterschied zwischen Conv1D und Conv2D?


18

Ich wollte durch die keras Faltung docs , und ich habe zwei Arten von convultuion Conv1D und Conv2D gefunden. Ich habe eine Websuche durchgeführt und das ist, was ich über Conv1D und Conv2D verstehe. Conv1D wird für Sequenzen und Conv2D für Bilder verwendet.

Ich dachte immer, dass Faltungsnetzwerke nur für Bilder verwendet und CNN auf diese Weise visualisiert werden

Bildbeschreibung hier eingeben

Ein Bild wird als große Matrix betrachtet, und dann gleitet ein Filter über diese Matrix und berechnet das Skalarprodukt. Das glaube ich, was Keras als Conv2D nennt. Wenn Conv2D auf diese Weise funktioniert, was ist dann der Mechanismus von Conv1D und wie können wir uns dessen Mechanismus vorstellen?


2
Schauen Sie sich diese Antwort an . Hoffe das hilft.
learner101

Antworten:


4

Faltung ist eine mathematische Operation, bei der Sie einen Tensor oder eine Matrix oder einen Vektor in einen kleineren "zusammenfassen". Wenn Ihre Eingangsmatrix eindimensional ist dann zusammenfassen Sie zusammen , dass auf Dimensionen, und wenn ein Tensor hat n Dimensionen dann Sie konnten an allen n Dimensionen zusammenfassen. Conv1D und Conv2D fassen sich in einer oder zwei Dimensionen zusammen.

bich=j=m-10einich+jwj
ich=[1,n-m+1]

wich=1/n

[ein:ein1ein2ein3w:1/21/2w:1/21/2]=[b:ein1+ein22ein2+ein32]

bichkl=j1=m1-1j2=m2-1j3=m4-10einich+j1,k+j2,l+j3wj1j2j3
wo ich=[1,n1-m1+1],k=[1,n2-m2+1],l=[1,n3-m3+1]


3

Diese 1d-Faltung ist kostensparend. Sie funktioniert auf die gleiche Weise, setzt jedoch ein eindimensionales Array voraus, das eine Multiplikation mit den Elementen vornimmt. Wenn Sie sich eine Matrix aus Zeilen oder Spalten vorstellen möchten, dh eine einzelne Dimension, wenn wir multiplizieren, erhalten Sie ein Array mit der gleichen Form, aber niedrigeren oder höheren Werten. Dies hilft, die Intensität der Werte zu maximieren oder zu minimieren.

Dieses Bild könnte Ihnen helfen, Bildbeschreibung hier eingeben

Weitere Informationen finden Sie unter https://www.youtube.com/watch?v=qVP574skyuM


1

Ich werde eine Pytorch-Perspektive verwenden, die Logik bleibt jedoch dieselbe.

Bei der Verwendung von Conv1d () müssen wir berücksichtigen, dass wir höchstwahrscheinlich mit zweidimensionalen Eingaben arbeiten werden, z. B. mit One-Hot-Coding-DNA-Sequenzen oder Schwarzweißbildern.

Der einzige Unterschied zwischen dem konventionelleren Conv2d () und Conv1d () besteht darin, dass letzteres einen eindimensionalen Kernel verwendet, wie in der folgenden Abbildung gezeigt.

Das Beispiel für Conv1d () finden Sie unter /programming/48859378/how-to-give-the-1d-input-to-convolutional-neural-networkcnn-using-keras/52508449

Hier wird die Höhe Ihrer Eingabedaten zur "Tiefe" (oder zu "in_channels"), und unsere Zeilen werden zur Kernelgröße. Beispielsweise,

import torch
import torch.nn as nn

tensor = torch.randn(1,100,4)
output = nn.Conv1d(in_channels =100,out_channels=1,kernel_size=1,stride=1)(tensor)
#output.shape == [1,1,4]

Wir können sehen, dass der Kernel sich automatisch auf die Höhe des Bildes erstreckt (genau wie in Conv2d () die Tiefe des Kernels sich automatisch über die Kanäle des Bildes erstreckt), und daher müssen wir nur die Kernelgröße in Bezug auf die Breite von angeben die Reihen.

Wir müssen uns nur daran erinnern, dass, wenn wir eine zweidimensionale Eingabe annehmen, unsere Filter zu unseren Spalten und unsere Zeilen zur Kernelgröße werden.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.