Keras - 1D卷积它是如何工作的

时间:2016-10-19 02:56:57

标签: neural-network convolution keras

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

下面是这个片段。嵌入层为批量中的每个示例输出400 x 50矩阵。我的问题是1D卷积是如何工作的?它如何在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))

2 个答案:

答案 0 :(得分:12)

在卷积神经网络(CNN)中,1D和2D滤波器实际上不是1维和2维。这是一个描述的惯例。

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

答案 1 :(得分:0)

从信号处理的背景出发,我还花了一些时间来理解它的概念,并且似乎社区中很多人都是这样。

Pyan给出了很好的解释。正如在许多论坛中经常用言语解释的那样,我制作了一些动画,希望对您有所帮助。

请参阅下面的输入张量,滤波器(或权重)和输出张量。您还可以看到输出张量的大小是所用滤镜数量(以不同颜色表示)的函数。

Visual Representation of the 1D Convolultion (Simplified)

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

希望它可以帮助某人。