Krizhevsky 的 '12 CNN 如何在第一层获得 253,440 个神经元?

机器算法验证 神经网络 深度学习 卷积神经网络
2022-02-11 12:51:49

Alex Krizhevsky 等人中。使用深度卷积神经网络进行 Imagenet 分类,它们枚举了每层中的神经元数量(见下图)。

网络的输入为 150,528 维,网络剩余层中的神经元数量由 253,440–186,624–64,896–64,896–43,264–4096–4096–1000 给出。

美国有线电视新闻网

3D 视图

第一层之后所有层的神经元数量是明确的。计算神经元的一种简单方法是简单地将该层的三个维度相乘 ( planes X width X height):

  • 第 2 层:27x27x128 * 2 = 186,624
  • 第 3 层:13x13x192 * 2 = 64,896
  • 等等

但是,看第一层:

  • 第 1 层:55x55x48 * 2 = 290400

请注意,这与论文 253,440的规定不同!

计算输出大小

计算卷积输出张量的另一种方法是:

如果输入图像是 3D 张量nInputPlane x height x width,则输出图像大小将nOutputPlane x owidth x oheight

owidth = (width - kW) / dW + 1

oheight = (height - kH) / dH + 1.

(来自Torch SpatialConvolution 文档

输入图像为:

  • nInputPlane = 3
  • height = 224
  • width = 224

而卷积层为:

  • nOutputPlane = 96
  • kW = 11
  • kH = 11
  • dW = 4
  • dW = 4

(例如内核大小11,步幅4

代入我们得到的这些数字:

owidth = (224 - 11) / 4 + 1 = 54 oheight = (224 - 11) / 4 + 1 = 54

因此,55x55我们只需要匹配纸张所需的尺寸。它们可能是填充(但cuda-convnet2模型明确将填充设置为 0)

如果我们采用54-size 维度,我们会得到96x54x54 = 279,936神经元 - 仍然太多。

所以我的问题是:

他们如何为第一个卷积层获得 253,440 个神经元?我错过了什么?

2个回答

来自斯坦福大学关于 NN 的说明:

现实世界的例子。Krizhevsky 等人。在 2012 年赢得 ImageNet 挑战的架构接受了尺寸为 [227x227x3] 的图像。在第一个卷积层上,它使用感受野大小 F=11、步幅 S=4 且没有零填充 P=0 的神经元。由于 (227 - 11)/4 + 1 = 55,并且由于 Conv 层的深度为 K=96,因此 Conv 层输出体积的大小为 [55x55x96]。该体积中的 55*55*96 个神经元中的每一个都连接到输入体积中大小为 [11x11x3] 的区域。此外,每个深度列中的所有 96 个神经元都连接到输入的相同 [11x11x3] 区域,但当然具有不同的权重。有趣的是,如果您阅读实际论文,它声称输入图像是 224x224,这肯定是不正确的,因为 (224 - 11)/4 + 1 显然不是整数。这让 ConvNets 历史上的许多人感到困惑,对发生的事情知之甚少。我自己最好的猜测是,Alex 使用了 3 个额外像素的零填充,他在论文中没有提到。

参考:http ://cs231n.github.io/convolutional-networks/

这些笔记伴随着斯坦福 CS 课程 CS231n:用于视觉识别的卷积神经网络。有关作业的问题/疑虑/错误报告,请联系 Justin Johnson,或联系 Andrej Karpathy 有关课程笔记

这篇论文真的很混乱。首先,图像的输入大小不正确,224x224 不会给出 55 的输出。这些神经元就像分组的像素一样,所以输出是随机值(神经元值)的 2D 图像。所以基本上神经元的数量=宽度x高度x深度,没有秘密可以解决这个问题。