输出量的大小(卷积神经网络)

Size of the output volume (Convolution Neural Network)

简介

根据我从 CS231n Convolutional Neural Networks for Visual Recognition 的理解,Size of the output volume 表示给定以下参数的神经元数量:

  1. 输入体积大小(W)
  2. Conv Layer 神经元的感受野大小(F) 也就是内核或过滤器的大小
  3. 应用它们的步幅 (S) 或我们用来移动内核的步幅
  4. 边界上使用的零填充量(P)

我贴了两个例子。在 示例 1 中我完全没有问题。但是在 示例 2 中我感到困惑。


示例 1

真实世界示例 部分中,他们从 [227 x 227 x 3] 输入图像开始。参数如下:F = 11, S = 4, P = 0, W = 227.

我们注意到卷积的深度为 K = 96(为什么?)

output volume 的大小是 (227 - 11)/4 + 1 = 55。因此,我们将有 55 x 55 x 96 = 290,400 个神经元,每个神经元指向图像中的一个 [11 x 11 x 3] 区域(请原谅,如果这个术语被屠杀了),这实际上是我们要计算点积的内核。


示例 2

以下示例取自 Numpy 示例 部分。我们有一个具有以下形状 [11 x 11 x 3] 的输入图像。用于计算输出 Volume 的 大小的参数如下:W = 11, P = 0, S = 2 and F = 5.

我们注意到卷积的深度为K = 4

公式(11-5)/2+1 = 4只产生4个神经元。每个神经元指向图像中大小为 [5 x 5 x 4] 的区域。

他们似乎只在 x 方向上移动内核。我们不应该有 12 个神经元,每个神经元具有 [5 x 5 x 4] 权重。

V[0,0,0] = np.sum(X[:5,:5,:]   * W0) + b0
V[1,0,0] = np.sum(X[2:7,:5,:]  * W0) + b0
V[2,0,0] = np.sum(X[4:9,:5,:]  * W0) + b0
V[3,0,0] = np.sum(X[6:11,:5,:] * W0) + b0

问题

  • 真不明白为什么只用4个神经元,不用12
  • 他们为什么在示例 1 中选择 K = 96
  • W参数是否总是等于输入图像中的宽度

示例 1

为什么卷积的深度是K = 96?

深度(K)等于卷积层上使用的滤波器数量。通常,更大的数字会给出更好的结果。问题是:训练速度较慢。复杂的图像需要更多的过滤器。我通常在第一层使用 32 个过滤器,在第二层使用 64 个过滤器开始测试。

示例 2

公式(11-5)/2+1 = 4只产生4个神经元

我不是专家,但我认为这是错误的。该公式仅定义输出大小(高度和宽度)。卷积层具有大小(高度和宽度)和深度。大小由这个公式定义,深度由使用的过滤器数量定义。神经元总数为:

## height * width * depth
4 * 4 * 4 = 64

问题

  1. 该层有 64 个神经元,每个深度切片 16 个。
  2. 过滤器数量越多,通常效果越好。
  3. 据我所知你需要分别计算卷积层的高度和宽度。在计算输出宽度时,W 将是图像的宽度,而 F 将是所用滤镜的宽度。在计算高度时,您将使用图像和过滤器的高度。将图像和滤镜平方后,您可以进行一次操作,因为两次操作的结果相同。