【问题标题】:Constraint on dimensions of activation/feature map in convolutional network卷积网络中激活/特征图维度的约束
【发布时间】:2019-12-16 16:14:13
【问题描述】:

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

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

但是,如果我在 Python 2.7 中运行以下 sn-p,代码似乎表明激活图的大小是通过 (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)

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

【问题讨论】:

    标签: python machine-learning conv-neural-network pytorch


    【解决方案1】:

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

    另外,据我所知,this 是该主题的最佳教程。

    奖励:here 是一个简洁的转化计算可视化工具。

    【讨论】:

    • 可视化效果很棒。我将输入 6x6 和内核大小 3x3 设置为填充 0 和步幅 2,并意识到滑动卷积存在“提前终止”条件(即,与最后留下的图像量相比,步幅是否太大)。所以,这个公式并不完全正确,因为它没有考虑到这一点。
    • @AB 我认为可视化是正确的,并且与pytorch中的公式一致。 Hin=6,K=3,P=0,D=1,S=2;在公式和可视化中给出 Hout=2。
    • 我指的是我从其他来源得到的公式 (W − F + 2P)/S + 1,我同意 pytorch 公式是有道理的。
    • @AB 哦,我明白了。我认为你的公式也是正确的,它只需要一个floor(),它与 pytorch 相同,dilation=1(默认模式)
    • 引用我帖子中提到的斯坦福课程页面:“例如,当输入大小为W=10时,不使用零填充P=0,过滤器大小为F=3 ,则不可能使用步幅 S=2,因为 (W−F+2P)/S+1=(10−3+0)/2+1=4.5,即不是整数......因此,超参数的这种设置被认为是无效的,ConvNet 库可能会抛出异常或零填充其余部分以使其适合,或裁剪输入以使其适合,等等。”所以,我猜这是一个实现点,pytorch 只是优雅地处理它
    猜你喜欢
    • 2016-04-16
    • 2014-08-09
    • 2016-03-10
    • 2017-07-31
    • 2020-12-02
    • 2010-11-21
    • 2016-12-04
    • 2016-04-27
    • 2017-06-14
    相关资源
    最近更新 更多