输出量的大小(卷积神经网络)
Size of the output volume (Convolution Neural Network)
简介
根据我从 CS231n Convolutional Neural Networks for Visual Recognition 的理解,Size of the output volume
表示给定以下参数的神经元数量:
- 输入体积大小(W)
- Conv Layer 神经元的感受野大小(F) 也就是内核或过滤器的大小
- 应用它们的步幅 (S) 或我们用来移动内核的步幅
- 边界上使用的零填充量(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
问题
- 该层有 64 个神经元,每个深度切片 16 个。
- 过滤器数量越多,通常效果越好。
- 据我所知你需要分别计算卷积层的高度和宽度。在计算输出宽度时,W 将是图像的宽度,而 F 将是所用滤镜的宽度。在计算高度时,您将使用图像和过滤器的高度。将图像和滤镜平方后,您可以进行一次操作,因为两次操作的结果相同。
简介
根据我从 CS231n Convolutional Neural Networks for Visual Recognition 的理解,Size of the output volume
表示给定以下参数的神经元数量:
- 输入体积大小(W)
- Conv Layer 神经元的感受野大小(F) 也就是内核或过滤器的大小
- 应用它们的步幅 (S) 或我们用来移动内核的步幅
- 边界上使用的零填充量(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
问题
- 该层有 64 个神经元,每个深度切片 16 个。
- 过滤器数量越多,通常效果越好。
- 据我所知你需要分别计算卷积层的高度和宽度。在计算输出宽度时,W 将是图像的宽度,而 F 将是所用滤镜的宽度。在计算高度时,您将使用图像和过滤器的高度。将图像和滤镜平方后,您可以进行一次操作,因为两次操作的结果相同。