CNN架构神经元总数计算方法问询,附现有PyTorch网络实现代码
核心定义
CNN中的神经元总数为每层输出特征图的总元素数,每个输出位置对应一个神经元:
- 卷积/池化层:神经元数 = 输出通道数 × 输出特征图高度 × 输出特征图宽度
- 全连接层:神经元数 = 输出维度
卷积/池化层的输出尺寸通用计算公式:
输出尺寸 = floor( (输入尺寸 + 2×padding值 - kernel尺寸) / stride + 1 )
你的网络逐层计算过程
根据你给出的全连接层输入64 * 1 * 1,可反推匹配的输入图像为单通道32×32(行业常用测试尺寸,推导后刚好匹配输出维度),逐层计算如下:
- 输入层:1通道32×32,神经元数 = 1×32×32 = 1024(一般统计时可选择是否包含输入层)
- Conv1层:
输入32×32,kernel=7×7,padding=1,stride=2
输出尺寸 = floor( (32 + 2×1 -7)/2 +1 ) = 14
神经元数 = 16×14×14 = 3136 - MaxPool1层(stride=2的2D最大池化,默认kernel=2×2):
输出尺寸 = floor(14/2) =7
神经元数 = 16×7×7 = 784 - Conv2层:
输入7×7,kernel=7×7,padding=1,stride=2
输出尺寸 = floor( (7 + 2×1 -7)/2 +1 ) = 2
神经元数 = 32×2×2 = 128 - MaxPool2层:
输出尺寸 = floor(2/2) =1
神经元数 = 32×1×1 = 32 - Conv3层:
输入1×1,kernel=3×3,padding=2,stride=2
输出尺寸 = floor( (1 + 2×2 -3)/2 +1 ) = 2
神经元数 = 64×2×2 = 256 - MaxPool3层:
输出尺寸 = floor(2/2) =1
神经元数 = 64×1×1 = 64 - FC1全连接层:
输出维度=8,神经元数=8
总神经元数统计
根据统计范围不同有两种常见结果:
- 仅统计可学习层(卷积层+全连接层,不含输入、池化层):3136 + 128 + 256 + 8 = 3528
- 统计所有运算层(含池化层,不含输入层):3136 + 784 + 128 +32 +256 +64 +8 = 4408
- 包含输入层的全量统计:4408 + 1024 = 5432
注意事项
如果你的输入图像尺寸、池化核大小和默认配置不同,只需将对应参数代入上述通用公式重新计算即可,逻辑完全一致。
内容的提问来源于stack exchange,提问作者Atila
相关产品推荐
相关产品推荐

