Keras - 一维卷积它是如何工作的

Keras - 1D Convolution How it works

来自这个例子: https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.py

下面是这个片段。嵌入层为批处理中的每个示例输出一个 400 x 50 矩阵。我的问题是一维卷积是如何工作的?它如何在 400 x 50 矩阵中工作?

# we start off with an efficient embedding layer which maps
# our vocab indices into embedding_dims dimensions
model.add(Embedding(max_features,
                    embedding_dims,
                    input_length=maxlen,
                    dropout=0.2))

# we add a Convolution1D, which will learn nb_filter
# word group filters of size filter_length:
model.add(Convolution1D(nb_filter=nb_filter,
                        filter_length=filter_length,
                        border_mode='valid',
                        activation='relu',
                        subsample_length=1))

在卷积神经网络 (CNN) 中,一维和二维滤波器并不是真正的一维和二维。这是描述的约定。

在您的示例中,每个一维滤波器实际上是一个 Lx50 滤波器,其中 L 是滤波器长度的参数。卷积仅在一维中执行。这可能就是它被称为 1D 的原因。因此,通过适当的填充,每个一维滤波器卷积都会给出一个 400x1 的向量。 Convolution1D层最终会输出一个400*nb_filter.

的矩阵

来自信号处理的背景,我也花了一段时间才理解它的概念,社区中的许多人似乎都是这种情况。

Pyan给出了很好的解释。由于在很多论坛上经常用文字解释,所以我制作了一个小动画,希望对您有所帮助。

见下方输入张量、过滤器(或权重)和输出张量。您还可以看到输出张量的大小是所用滤波器数量的函数(用不同颜色表示)。

Visual Representation of the 1D Convolultion (Simplified)

请注意,要执行输入和滤波器之间的标量乘法,滤波器应该转置。还有不同的实现(Karas、Tensorflow、Pytorch...),但我认为这个动画可以很好地表示正在发生的事情。

希望对大家有所帮助。