具有多个过滤器的卷积层的输出形状

Output shape of a convolutional layer with multiple filters

我在 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 因为第二层的每个过滤器都会作用于第一层输出的每个特征图吗?

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

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

如果有人花时间真正写出数学,我会很高兴的。但我猜没有人知道实际操作是什么。 “适用于所有渠道”的模棱两可的语言与 OP 认为正在发生的事情是一样的。上面的一位评论者使用这种语言来表示它们在所有频道上 求和。不清楚。

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

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

创建一个 2D 卷积层
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 维张量,这可能会让关心实际操作的人认为过滤器将作为张量积应用,从而从层创建更高维度的输出。