【问题标题】:AlexNet paper does not match dimensions they reported?AlexNet 论文与他们报告的尺寸不匹配?
【发布时间】:2023-03-13 04:52:01
【问题描述】:

我关注paper where AlexNet was introduced,他们报告的尺寸与他们附上的数字不符。

第一个 conv 层(即 96 个 11x11x3 卷积)的输出为 55x55x96(对于简单的 1GPU 情况)。现在论文指出,第二个 conv 层应用于 maxpooling 层的输出。假设 MaxPool 是一个 3x3 的内核,步长为 2(正如他们用 s 和 z 报告的那样),这意味着第二个卷积层的输入应该是 (55 - 3)/2 + 1 = 27,但在提供的图片中他们写的 AlexNet 有一个 Max Pooling 操作,但他们不执行池化的降维!

所以第二个卷积层应该应用到宽度和高度 = 27 而不是 55 的体积上,对吧?

此外,我查看了 PyTorch 是如何实现它的,看看我是否遗漏了什么,他们只是更改了配置,从 64 个内核开始......:

AlexNet(
  (features): Sequential(
    (0): Conv2d(3, 64, kernel_size=(11, 11), stride=(4, 4), padding=(2, 2))
    (1): ReLU(inplace)
    (2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
    (3): Conv2d(64, 192, kernel_size=(5, 5), stride=(1, 1), padding=(2, 2))
    (4): ReLU(inplace)
    (5): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
    (6): Conv2d(192, 384, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (7): ReLU(inplace)
    (8): Conv2d(384, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (9): ReLU(inplace)
    (10): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (11): ReLU(inplace)
    (12): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=False)
  )
  (classifier): Sequential(
    (0): Dropout(p=0.5)
    (1): Linear(in_features=9216, out_features=4096, bias=True)
    (2): ReLU(inplace)
    (3): Dropout(p=0.5)
    (4): Linear(in_features=4096, out_features=4096, bias=True)
    (5): ReLU(inplace)
    (6): Linear(in_features=4096, out_features=1000, bias=True)
  )
)

【问题讨论】:

  • 我可以清楚地看到Conv2层上27x27x128的尺寸;我没有在图表上看到一个 55x55 喂食另一个 55x55。我们两个哪里不同步了?
  • 至于 64,是的,在我看来好像模型工程师更改了这些层的拓扑宽度,我不明白为什么。

标签: deep-learning conv-neural-network pytorch


【解决方案1】:

我找到了一个 comment in a GitHub issue 很好地解释了这一点:

当前实现来自the torch re-implementation,它基于single GPU implementation from Alex,使用256个过滤器,而2GPU implementation from Krizhevsky uses 384 filters

最初的 AlexNet 模型需要在 2 个 GTX 580 3GB GPU 上进行训练,因为该模型太大而无法在单个 GPU 上进行训练(当时)。 Krizhevsky(论文作者)发布了一个不同维度的单 GPU 实现,PyTorch 实现就出自那里。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-20
    • 2021-07-23
    • 2012-09-11
    • 2014-12-14
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多