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

11

从这个例子中: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个回答

13
在卷积神经网络(CNNs)中,1D和2D过滤器实际上并不是真正的一维和二维。这只是一种描述约定。
在您的例子中,每个1D过滤器实际上是一个Lx50过滤器,其中L是过滤器长度的参数。卷积只在一个维度上进行。这可能是为什么它被称为1D的原因。因此,通过适当的填充,每个1D过滤器卷积会产生一个400x1的向量。Convolution1D层最终将输出一个400*nb_filter的矩阵。

我们能否将其概念化为在每一步创建L个单词的点积(首先是L,然后滑动并包括2:2 + L个单词等),其中每次都对L个单词的完整嵌入(50个值)进行点积? - B_Miner
1
是的,卷积的每个输出值实际上都是L*50嵌入值与滤波器的点积。 - pyan

1

由于我的信号处理背景,我花了一些时间才理解这个概念,似乎很多人在社区中也是如此。

Pyan 给出了一个非常好的解释。因为它经常在许多论坛中用言语解释,所以我制作了一个小动画,希望能够帮助大家。

请参见下面的输入张量、过滤器(或权重)和输出张量。您还可以看到输出张量的大小与使用的滤波器数量(用不同颜色表示)的函数关系。

1D卷积的可视化表示(简化版)

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

希望能帮助到某些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接