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
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?
Antworten:
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.
quelle
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,
Weitere Informationen finden Sie unter https://www.youtube.com/watch?v=qVP574skyuM
quelle
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.
Hier wird die Höhe Ihrer Eingabedaten zur "Tiefe" (oder zu "in_channels"), und unsere Zeilen werden zur Kernelgröße. Beispielsweise,
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.
quelle