从这个例子: 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))
答案 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 ...),但我认为该动画可以很好地表示正在发生的事情。
希望它可以帮助某人。