Przeglądałem dokumenty konwolucji keras i znalazłem dwa rodzaje konwulsji Conv1D i Conv2D. Przeprowadziłem wyszukiwanie w Internecie i właśnie to rozumiem na temat Conv1D i Conv2D; Conv1D jest używany do sekwencji, a Conv2D do zdjęć.
Zawsze myślałem, że sieci nerwowe splotu są używane tylko do obrazów i w ten sposób wizualizują CNN
Obraz jest uważany za dużą matrycę, a następnie filtr przesunie się po tej matrycy i obliczy iloczyn punktowy. Wierzę w to, co Keras wymienia jako Conv2D. Jeśli Conv2D działa w ten sposób, to jaki jest mechanizm Conv1D i jak możemy sobie wyobrazić jego mechanizm?
Odpowiedzi:
Konwolucja jest operacją matematyczną polegającą na „podsumowaniu” tensora lub macierzy lub wektora na mniejszy. Jeśli macierz wejściowa jest jednowymiarowe następnie podsumować wzdłuż że wymiary, a jeśli tensor ma n wymiary wtedy mogłaby podsumować wzdłuż wszystkich wymiarach n. Conv1D i Conv2D podsumowują (zwijają) wzdłuż jednego lub dwóch wymiarów.
Na przykład, możesz przekształcić wektor w krótszy wektor w następujący sposób. Uzyskaj „długi” wektor A z n elementów i splot go za pomocą wektora ciężaru W z m elementów w „krótki” (podsumowujący) wektor B z n-m + 1 elementami: gdziebja= ∑j = m - 10zai + j∗ wjot i = [ 1 , n - m + 1 ]
Tak więc, jeśli masz wektor długości n, a twoja macierz wagowa ma również długość n , wówczas splot wytworzy skalar lub wektor długości 1 równy średniej wartości wszystkich wartości w macierzy wejściowej. To rodzaj zdegenerowanego splotu, jeśli chcesz. Jeśli ta sama macierz ciężaru jest o jeden mniejsza niż macierz wejściowa, wówczas otrzymujesz średnią ruchomą na wyjściu o długości 2 itd.wja= 1 / n
Możesz zrobić to samo z trójwymiarowym tensorem (macierzą) w ten sam sposób: gdziebi k l= ∑jot1= m1- 1jot2)=m2)- 1jot3)=m4- 10zai + j1, k + j2), l + j3)∗ wjot1jot2)jot3) i = [ 1 , n1- m1+ 1 ] , k = [ 1 , n2)- m2)+ 1 ] , l = [ 1 , n3)- m3)+ 1 ]
źródło
Ten splot 1d jest oszczędny, działa w ten sam sposób, ale zakłada tablicę 1-wymiarową, która tworzy mnożenie z elementami. Jeśli chcesz wizualizować, pomyśl o macierzy wiersza lub kolumny, tj. O pojedynczym wymiarze, gdy się mnożymy, otrzymujemy tablicę o tym samym kształcie, ale o mniejszych lub wyższych wartościach, co pomaga w maksymalizacji lub minimalizacji intensywności wartości.
Ten obraz może ci pomóc,
Szczegółowe informacje można znaleźć na stronie https://www.youtube.com/watch?v=qVP574skyuM
źródło
Będę używał perspektywy Pytorch, jednak logika pozostaje taka sama.
Korzystając z Conv1d (), musimy pamiętać, że najprawdopodobniej będziemy pracować z wejściami dwuwymiarowymi, takimi jak sekwencje DNA kodowane na gorąco lub czarno-białe obrazy.
Jedyną różnicą między bardziej konwencjonalnymi Conv2d () i Conv1d () jest to, że ten ostatni używa jednowymiarowego jądra, jak pokazano na poniższym obrazku.
Tutaj wysokość twoich danych wejściowych staje się „głębokością” (lub kanałami_wybieranymi), a nasze wiersze stają się rozmiarem jądra. Na przykład,
Widzimy, że jądro automatycznie rozciąga się na wysokość obrazu (tak jak w Conv2d () głębokość jądra automatycznie obejmuje kanały obrazu) i dlatego pozostaje nam tylko rozmiar jądra w odniesieniu do rozpiętości rzędy.
Musimy tylko pamiętać, że jeśli przyjmujemy dwuwymiarowe dane wejściowe, nasze filtry stają się naszymi kolumnami, a nasze wiersze rozmiarami jądra.
źródło
Chciałbym wyjaśnić różnicę wizualnie i szczegółowo (komentarze w kodzie) i bardzo bardzo łatwo.
Sprawdźmy najpierw Conv2D w TensorFlow .
Conv1D jest szczególnym przypadkiem Conv2D, jak stwierdzono w tym paragrafie z dokumentu TensorFlow Conv1D .
Zobaczmy, jak możemy przenieść Conv1D również na problem Conv2D. Ponieważ Conv1D jest zwykle używany w scenariuszach NLP, możemy to zilustrować w poniższym problemie NLP.
Zróbmy to za pomocą Conv1D (również w TensorFlow):
Widzimy, że 2D w Conv2D oznacza, że każdy kanał na wejściu i filtrze jest dwuwymiarowy (jak widzimy w przykładzie gif), a 1D w Conv1D oznacza, że każdy kanał na wejściu i filtrze jest jednowymiarowy (jak widzimy u kota i psi przykład NLP).
źródło