AlexNet卷积层、池化层的输出图像尺寸计算

AlexNet2012年时计算机的算力还不足以支持这么深层的模型,所以AlexNet当时是把模型并行放在两个GPU上,而这篇文章是合并计算的。值得注意的是,AlexNet模型中输入图像是224×224×3。

AlexNet模型

先看模型代码:

net = nn.Sequential(

         nn.Conv2d(3, 96, kernel_size=11, stride=4, padding=2), nn.ReLU(),

         nn.MaxPool2d(kernel_size=3, stride=2),

         nn.Conv2d(96, 256, kernel_size=5, stride=1, padding=2), nn.ReLU(),

         nn.MaxPool2d(kernel_size=3, stride=2),

         nn.Conv2d(256, 384, kernel_size=3, stride=1, padding=1), nn.ReLU(),

         nn.Conv2d(384, 384, kernel_size=3, stride=1, padding=1), nn.ReLU(),

扫描二维码关注公众号,回复: 13172129 查看本文章

         nn.Conv2d(384, 256, kernel_size=3, stride=1, padding=1), nn.ReLU(),

         nn.MaxPool2d(kernel_size=3, stride=2), nn.Flatten(),

         nn.Linear(9216, 4096), nn.ReLU(), nn.Dropout(p=0.5),

         nn.Linear(4096, 4096), nn.ReLU(), nn.Dropout(p=0.5),

         nn.Linear(4096, 1000), nn.ReLU(), nn.Dropout(p=0.5))

现在我们打印一下各层的输出:

 那么当你搭建这个神经网络模型时,对于第一个全连接层的输入特征(程序中的9216)怎么确定呢?这其实是有计算公式的:(长或宽-核的大小+2×padding)/stride+1。

输入层到第一个卷积层:(224-11+2×2)/4+1=55;

池化层:(55-3+2×0)/2+1=27;

卷积层:(27-5+2×2)/1+1=27;

池化层:(27-3+2×0)/2+1=13;

卷积层:(13-3+2×1)/1+1=13;

卷积层:(13-3+2×1)/1+1=13;

卷积层:(13-3+2×1)/1+1=13;

池化层:(13-3+2×0)/2+1=6;

也就是最后一个池化层的Output shape:torch.Size([1, 256, 6, 6]),那么第一个全连接层的输入特征为:256×6×6=9216。

猜你喜欢

转载自blog.csdn.net/m0_46352350/article/details/121350060