1. 卷积神经网络尺寸计算基础
作为一名计算机视觉工程师,我每天都要和卷积神经网络(CNN)打交道。网络设计中最让人头疼的问题之一,就是搞不清楚每一层的输出尺寸会如何变化。今天我就把自己多年积累的尺寸计算经验整理成这篇实战指南。
1.1 核心公式解析
所有CNN尺寸计算都基于这个黄金公式:
code复制输出尺寸 = (输入尺寸 - 核尺寸 + 2×填充) / 步长 + 1
这个公式适用于:
- 普通卷积层
- 池化层(最大池化/平均池化)
- 转置卷积层(反向计算)
我第一次接触这个公式时,导师用了一个形象的比喻:想象你在操场上用粉笔画格子。输入尺寸是操场长度,卷积核是你的粉笔长度,步长是你每次移动的距离,填充是你在操场两端额外画的区域。最后能画多少个完整的格子,就是输出尺寸。
1.2 参数详解
让我们拆解公式中的每个参数:
- 输入尺寸:通常表示为H×W(高度×宽度),如224×224
- 核尺寸:卷积核或池化核的大小,如3×3
- 填充(Padding):在输入周围添加的像素圈数
- 填充0:不添加("valid"卷积)
- 填充1:添加1圈("same"卷积常用)
- 步长(Stride):卷积核每次移动的步数
- 步长1:逐个像素滑动
- 步长2:隔一个像素滑动(下采样)
重要提示:PyTorch和TensorFlow对填充的定义略有不同。PyTorch的padding是单边填充数,TensorFlow的"SAME"填充会自动计算填充量。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 卷积层尺寸计算实战
2.1 基础计算案例
让我们看几个典型配置的计算过程:
案例1:保持尺寸的卷积
python复制输入:224×224
卷积核:3×3
步长:1
填充:1
计算:
(224 - 3 + 2×1) / 1 + 1 = 224
输出:224×224
这是最常用的配置,保持特征图尺寸不变。
案例2:下采样卷积
python复制输入:224×224
卷积核:3×3
步长:2
填充:1
计算:
(224 - 3 + 2×1) / 2 + 1 = 112.5 → 112
输出:112×112
这里出现了小数,PyTorch会向下
