【发布时间】: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