【问题标题】:output of conv layer in AlexNetAlexNet中conv层的输出
【发布时间】:2021-09-25 03:24:57
【问题描述】:

我正在研究用 PyTorch 实现的 AlexNet。根据公式,输出高度 = (input_height + padding_top + padding_bottom - kernel_height) / stride_height + 1. 所以使用公式,输入大小为 224,步幅 = 4,填充 = 1,内核大小 =11,输出应该大小为 54.75。但是,如果您运行模型摘要,您会看到第一层的输出为 54。PyTorch 是否会缩减输出大小?如果是这样,它是否会持续减少(看起来像这样)?我想了解幕后发生的事情。

这是我参考的代码:

net = nn.Sequential(

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

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

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

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

nn.Linear(4096, 10))

【问题讨论】:

    标签: python deep-learning pytorch


    【解决方案1】:

    输出大小当然是整数!只是你的公式不正确,表达式是height = floor((input_height + padding_top + padding_bottom - kernel_height) / stride_height + 1)。否则这没有任何意义。

    【讨论】:

      【解决方案2】:

      是的,当你有小数点的输出长度时,它会被剪掉。

      因为当您查看输出变量时,它会是一个矩阵。矩阵中的每个元素都值得一个长度,并且不能保证一个元素的长度为 0.75,因此它要么被剪裁到 54,要么被舍入到 55。而且因为内核必须停止在下一个步幅不跨步的地方跨步匹配内核大小(如果内核没有停在那里,你可能会画出来会很有趣),它必须被剪掉。

      【讨论】:

        猜你喜欢
        • 2017-05-08
        • 1970-01-01
        • 1970-01-01
        • 2020-07-03
        • 1970-01-01
        • 2020-10-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多