假设CNN中间层的输入大小为512×512×128,在卷积层中,我们在第2步应用了48个7×7滤镜,没有填充。我想知道生成的激活图的大小是多少?

我检查了以前的一些帖子(例如herehere)以指向this斯坦福课程页面。并且给出的公式为(W − F + 2P)/ S +1 =(512-7)/ 2 +1,这意味着无法进行这种设置,因为我们得到的值不是整数。

但是,如果我在Python 2.7中运行以下代码段,该代码似乎表明激活映射的大小是通过(512-6)/ 2计算的,这很有意义,但与上面的公式不匹配:

>>> import torch
>>> conv = torch.nn.Conv2d(in_channels=128, out_channels=48, kernel_size=7, stride=2, padding=0)
>>> conv
Conv2d(128, 48, kernel_size=(7, 7), stride=(2, 2))
>>> img = torch.rand((1, 128, 512, 512))
>>> out = conv(img)
>>> out.shape
(1, 48, 253, 253)


感谢您对理解这个难题的任何帮助。

最佳答案

这是在pytorch中使用的公式:conv2d(转到shape部分)

而且,据我所知,this是关于该主题的最佳教程。

奖励:here是用于conv计算的简洁可视化工具。

关于python - 卷积网络中激活/特征图的维数约束,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59352314/

10-12 19:35