You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PyTorch中自动计算卷积层输出维度(无需nn.LazyLinear)?

自动计算PyTorch卷积层输出维度的方法

我希望能自动计算任意PyTorch卷积层的输出维度。在构建大型CNN时,手动计算最后一层卷积的输出会非常繁琐。请问有没有无需使用nn.LazyLinear的实时自动计算方法?

代码示例

self.conv1 = nn.Conv2d(1, 16, kernel_size=5, stride=2)
self.conv2 = nn.Conv2d(16, 32, kernel_size=5, stride=2)
self.conv3 = nn.Conv2d(32, 32, kernel_size=5, stride=2)

self.feature_dim = [ADD CODE HERE]

self.fc1 = nn.Linear(self.feature_dim, 256)

我曾尝试使用公式[(W−K+2P)/S]+1并在代码中实现,但为每一层都这么做比手动计算还要麻烦。有没有统一的方法直接从PyTorch读取输出形状?


可行方案

可以通过以下两个函数在前向传播过程中提取任意阶段的输出形状,其中torch.numel()可返回给定张量的总元素数:

self.flat_features = self._get_conv_output((1, 84, 84))

def _get_conv_output(self, shape):
    with torch.no_grad():
        input = torch.rand(1, *shape)
        output = self._forward_features(input)
        return output.numel()

def _forward_features(self, x):
    x = F.relu(self.conv1(x))
    x = F.relu(self.conv2(x))
    x = F.relu(self.conv3(x))
    return x

内容的提问来源于stack exchange,提问作者Tristan B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 04:42:43