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

Posted 慕宁L

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(),

         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。

以上是关于AlexNet卷积层池化层的输出图像尺寸计算的主要内容,如果未能解决你的问题,请参考以下文章

卷积层池化层和全连接层 区别和作用

Tensorflow之CNN卷积层池化层padding规则

卷积神经网络原理及其C++/Opencv实现

增加池化层后参数量

卷积后的最大池化层

理解CNN卷积层与池化层计算