【问题标题】:Output shape of a convolutional layer with multiple filters具有多个滤波器的卷积层的输出形状
【发布时间】:2018-10-07 17:00:40
【问题描述】:

我在 keras 中构建了一个 ConvNet,这是其中的 2 层

model.add(Conv2D(8 , 3 , input_shape = (28,28,1)))
model.add(Activation(act))

model.add(Conv2D(16 , 3))
model.add(Activation(act))

大小为26x26x8 的第一层的输出我完全理解,因为有 8 个大小为 3x3 的过滤器,每个过滤器都用于生成单独的特征图,因此 26x26x8

第二层的输出大小为24x24x16,我不明白。输出的大小不应该是24x24x128,因为第二层的每个过滤器都会作用于第一层输出的每个特征图吗?

基本上,我不明白一层的输出是如何馈送到另一层的输入的

【问题讨论】:

  • 不,每个过滤器都应用于前一层输出的所有通道(即深度轴)。例如,在您的示例中,第二个Conv2D 层中的每个过滤器的形状为(3, 3, 8)
  • 我认为您指的是第一层,因为该层有 8 个过滤器。我说的对吗?
  • 不,我指的是第二层的每个过滤器。该层中的每个过滤器(即内核)的形状为(3,3,8)。第一个 Conv2D 层中的每个过滤器的形状为(3,3,1)。通常,Conv2D 层中的每个过滤器的形状为:(filter_height, filter_width, num_channels_in_output_of_previous_layer)。是清楚还是我需要解释更多?
  • Conv2D 层中的每个过滤器的响应(即特征图)总是有一个通道。这就是为什么在第二层你有 16 个过滤器,所以你会有 16 个特征图作为输出。

标签: keras conv-neural-network convolution


【解决方案1】:

不,是convolutions over volume。每个过滤器适用于所有频道。

【讨论】:

    【解决方案2】:

    如果有人花时间实际写出数学,我会喜欢的。但我猜没有人知道实际操作是什么。 “适用于所有渠道”的模棱两可的语言与 OP 认为的情况相同。上面的评论者使用这种语言表示他们在所有渠道中汇总。不清楚。

    我和 OP 有同样的问题。我找到了答案。 Keras 中 Conv2D 层的卷积操作会创建一个与输入具有相同最终维度的过滤器。

    假设您有一个形状为 (6, 6, 3) 的输入 X,3 个通道(颜色或其他)中大小为 6×6 的张量。然后用

    创建一个二维卷积层
    conv = Conv2D(2, 3, input_shape=(6, 6, 3))
    

    将创建 2 个大小为 (3, 3, 3) 的过滤器,f1 和 f2。然后将每个过滤器以正确的方式应用于输入看起来像 f1ijk Xijk,其中 i 和 j 对位置的所有相关索引求和,颜色通道 k 对所有值求和,即 1、2 和 3这里。这会为 每个过滤器 生成大小为 (4, 4, 1) 的输出。这两个过滤器一起产生大小为 (4, 4, 2) 的输出。

    如果我们假设,正如 OP 所认为的那样,每个 3 通道张量滤波器的形状仅为 (3, 3, 1),那么您会困惑于如何将其应用于3 维张量,这可能会导致关心实际操作的人认为过滤器将作为张量积应用,从而从层创建显着更高维度的输出。

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 2018-02-19
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多