克里热夫斯基的'12 CNN如何在第一层获得253,440个神经元?


24

Alex Krizhevsky等人中。利用深层卷积神经网络图像网络进行分类,它们会枚举每层神经元的数量(请参见下图)。

网络的输入为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个神经元?我想念什么?


你有解决过这个吗?只是为了您的计算学究:宽度和高度实际为54.25。我试图弄清楚这一点,第一步是将假设的253440个神经元分配到96个过滤器中,每个过滤器产生2640个神经元。这不是平方数。所以我们俩在这里都有误会,或者作者可能有错……您是否与他们联系?
anderas

和我一样,这让我很困惑。顺便说一句,输入是224x224x3是真的吗?我认为必须是227x227x3。让我们看看是否有227x227,左上方的5个单元格和最后一个右侧的5个单元格不能是大小为11x11的内核卷积的中心。因此,内核的第一个中心是单元格(6,6),第一行的中心内核的最后一个单元格是cell(6x222)。使用stride-4时,我们将获得第6行的内核中心:列:6,10,14,...,222上的单元格,而将k中心的简单公式表示为column = 6+(k -1)* 4,使得柱222是第k个中心=(222-6)/ 4 + 1 = 55

4
请注意,48 * 48 * 55 * 2 = 253440,因此在计算第一层中的神经元数量(乘以48而不是55)时,它们可能会出现拼写错误。
tsiki 2015年


@Firebug这是[references]标签的有趣用法。我认为,我们仅使用它的疑问了引用。但是也许我错了。您使用其他方式吗?
变形虫说恢复莫妮卡

Answers:


8

从关于NN的斯坦福大学笔记中可以看出:

真实示例。克里热夫斯基等。在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/

这些说明随附于Stanford CS类CS231n:用于视觉识别的卷积神经网络。对于有关作业的疑问/疑虑/错误报告,请与贾斯汀·约翰逊联系,或与课程笔记联系Andrej Karpathy


是否可以通过命名这些注释的作者来称赞?
银鱼

注释中清楚地注明了作者的自我引用,请参阅cs231n.github.io
培根

2
尽管如果您单击链接可以清楚地引用它们,但引号也会出现在此处,因此在此也应给予感谢。这部分出于礼貌,但是由于链接可能会停止工作(例如,如果材料被删除/付费墙/移动到新地址)。不幸的是,我们在此站点上存在“链接腐烂”的严重问题-尽管我们打算长期提供统计问题的高质量答案,但许多较旧的答案已因不再起作用的链接而过时了。因此,尝试做出尽可能独立的答案通常更为安全。
银鱼

0

这篇论文确实令人困惑。首先,图像的输入大小不正确224x224不会给出55的输出。这些神经元就像一个像素中的分组像素一样,因此输出是随机值(神经元值)的2D图像。因此,基本上神经元的数量=宽度x高度x深度,没有任何秘密可以弄清楚。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.