深度学习进阶文档深度页
CNN 张量形状与参数量
系统计算 NCHW、卷积/池化输出、Flatten 和 Linear 参数量。
学习目标
- 逐层手算形状
- 计算卷积参数
- 用随机张量断言
为什么需要这个概念
多数 CNN 报错来自通道衔接和 Linear in_features 计算错误。
- 避免形状错误
- 估算模型容量
学习前需要掌握
卷积操作池化内容待补充
背景与问题
多数 CNN 报错来自通道衔接和 Linear in_features 计算错误。
概念定义
普通层通常保留 N;Conv 改 C 和空间;池化改空间;Flatten 合并 C/H/W。
直观理解
每经过一层都记账:N 看输入,C 看 out_channels,H/W 用公式。
核心原理
Conv 参数与 H/W 无关,Linear 参数与展平维度强相关。
手算后必须用随机张量、打印和 assert 验证。
数学表达
核心公式
bias=True 的普通卷积。
变量含义
NbatchC通道H,W空间尺寸
计算步骤
- 1Conv→[10,8,28,28]
- 2Pool→[10,8,14,14]
代码对应位置
示例 1CNN 张量形状与参数量 · PyTorch 示例:验证CNN 张量形状与参数量的输入、计算和输出。
变量解释
| 变量 | 含义 |
|---|---|
N | batch |
C | 通道 |
H,W | 空间尺寸 |
完整数值示例
Conv+Pool
已知条件
- [10,1,28,28]
- Conv 1→8,k3,p1
- Pool2
- 1
Conv→[10,8,28,28]
- 2
Pool→[10,8,14,14]
最终 [10,8,14,14]
处理前后对比
计算与实现步骤
- 1
保留 N
- 2
更新 C
- 3
计算 H/W
- 4
池化
- 5
Flatten 相乘
- 6
Linear 输出
代码实现
示例 1
CNN 张量形状与参数量 · PyTorch 示例
CNN 张量形状与参数量 · PyTorch 示例
PyTorch
example_01.py用途:验证CNN 张量形状与参数量的输入、计算和输出。
model=nn.Sequential(nn.Conv2d(1,8,3,padding=1),nn.MaxPool2d(2))
y=model(torch.randn(10,1,28,28))
assert y.shape==(10,8,14,14)代码解析
解析始终位于完整代码下方,并按实际代码段逐项对应。
输入数据与任务
验证CNN 张量形状与参数量的输入、计算和输出。
y- 目标标签或连续目标值。
model- 组合预处理和估计器的模型对象。
Step 1 · 1–3 行
随机输入不下载数据
model=nn.Sequential(nn.Conv2d(1,8,3,padding=1),nn.MaxPool2d(2))
y=model(torch.randn(10,1,28,28))
assert y.shape==(10,8,14,14)预期输出或运行结果
断言通过。
常见错误 · 5 条
- 通道不衔接
- stride 只凭直觉
- Flatten 算错
- 忽略尾部池化
- 确认样本轴、特征轴以及 X 与 y 的第一维完全对应。
实际应用
- 网络设计
- 参数预算
常见错误
通道不衔接
stride 只凭直觉
Flatten 算错
忽略尾部池化
文档来源
08_CNN张量形状与参数量计算原始文档
学习资料/deeplearning/08_CNN张量形状与参数量计算.md- §1 NCHW
- §2–5 形状
- §10 Flatten
- §11–12 参数量
- §13 验证
常见问题
Conv 参数为何不含 H/W?
同一核跨位置共享。
Flatten 是否删除 batch?
从 dim=1 开始时保留 batch。
推荐学习资料
暂未收录相关资料
参考库不会生成虚假资源或无效外部链接。