【问题标题】:Keras - 1D Convolution How it worksKeras - 一维卷积它是如何工作的
【发布时间】:2017-02-28 12:00:27
【问题描述】:

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

下面是这个sn-p。嵌入层为批次中的每个示例输出一个 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))

【问题讨论】:

    标签: neural-network convolution keras


    【解决方案1】:

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

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

    见下面的输入张量、过滤器(或权重)和输出张量。您还可以将输出张量的大小视为使用的过滤器数量的函数(用不同的颜色表示)。

    Visual Representation of the 1D Convolultion (Simplified)

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

    希望它可以帮助某人。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 我们能否将其概念化为在每个步骤中创建 L 个单词的点积(第一个 L,然后滑动并包含单词 2:2+L 等),其中完成了点积每次 L 个单词的完整嵌入(50 个值)?
      • 是的,卷积的每个输出值实际上是L*50个嵌入值与滤波器的点积。
      猜你喜欢
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-22
      • 1970-01-01
      • 2016-12-04
      相关资源
      最近更新 更多