AI知识分享AI知识分享
✿导航
  • 人工智能
  • 神经网络
  • 机器学习
  • 深度学习
  • 强化学习
  • 自然语言处理
  • 计算机视觉
  • 大模型基础
  • 动手学深度学习
  • 理论理解
  • 工程实践
  • 应用开发
  • AI For Everyone
  • AIGC_2024大会
  • AIGC_2025大会
  • Transformer
  • Pytorch
  • HuggingFace
  • 蒸馏
  • RAG
  • 目标检测
  • MCP
  • 概念
  • 意图识别
  • 工具
✿导航
  • 人工智能
  • 神经网络
  • 机器学习
  • 深度学习
  • 强化学习
  • 自然语言处理
  • 计算机视觉
  • 大模型基础
  • 动手学深度学习
  • 理论理解
  • 工程实践
  • 应用开发
  • AI For Everyone
  • AIGC_2024大会
  • AIGC_2025大会
  • Transformer
  • Pytorch
  • HuggingFace
  • 蒸馏
  • RAG
  • 目标检测
  • MCP
  • 概念
  • 意图识别
  • 工具
  • 大模型基础

    • 语言模型基础

      • 概述
      • 基于统计方法的语言模型
      • 基于神经网络的语言模型
      • 语言模型的采样方法
      • 语言模型的评测
    • 大语言模型架构

      • 概述
      • 主流模型架构
      • Encoder-only
      • Encoder-Decoder
      • Decoder-only
      • 非Transformer 架构
    • Prompt工程

      • 工程简介
      • 上下文学习
      • 思维链
      • 技巧
    • 参数高效微调

      • 概述
      • 参数附加方法
      • 参数选择方法
      • 低秩适配方法
      • 实践与应用
    • 模型编辑

      • 简介
      • 方法
      • 附加参数法
      • 定位编辑法
    • RAG

      • 基础
      • 架构
      • 知识检索
      • 生成增强
  • 动手学深度学习

    • 深度学习基础

      • 引言
      • 数据操作
      • 数据预处理
      • 数学知识(线代、矩阵计算、求导)
      • 线性回归
      • 基础优化方法
      • Softmax回归
      • 感知机
      • 模型选择
      • 过拟合和欠拟合
      • 环境和分布偏移
      • 权重衰减
      • Dropout
      • 数值稳定性
    • 卷积神经网络

      • 模型基本操作
      • 从全连接层到卷积
      • 填充和步长
      • 多个输入和输出通道
      • 池化层
      • LeNet
      • AlexNet
      • VGG
      • NiN网络
      • GoogleNet
      • 批量归一化
      • ResNet
    • 计算机视觉

      • 图像增广
      • 微调
      • 目标检测
      • 锚框
      • 区域卷积神经网络
      • 单发多框检测
      • 一次看完
      • 语义分割
      • 转置卷积
      • 全连接卷积神经网络
      • 样式迁移
    • 循环神经网络

      • 序列模型
      • 语言模型
      • 循环神经网络
      • 序列到序列学习
      • 搜索策略
    • 注意力机制

      • 优化算法

填充和步长

填充

  • 给定(32 x32)输入图像
  • 应用 5 × 5 大小的卷积核
    • 第1层得到输出大小 28 × 28
    • 第7层得到输出大小 4 × 4
  • 更大的卷积核可以更快地减小输出大小
    • 形状从nh × nw 减少到(nh -kh + 1)×(nw - kw + 1)

实际填充

image-20260307102727591

规则:

  • 填充ph 行和pw列,输出形状为 (nh -kn +Ph + 1) ×(nw - kw +pw + 1)
  • 通常取 ph= kh-l,Pw= kw1
    • 当 kh 为奇数:在上下两侧填充 ph/2
    • 当 kh 为偶数:在上侧填充「ph/2],在下侧填充 LPh/2』

步幅

填充减小的输出大小与层数线性相关

  • 给定输入大小、224×224,在使用5×5卷积核的情况下,需要44层将输出降低到 4×4
  • 需要大量计算才能得到较小输出

image-20260307103243535

规则:

image-20260307103404731

总结

  • 填充和步幅是卷积层的超参数
  • 填充在输入周围添加额外的行/列,来控制输出形状的减少量
  • 步幅是每次滑动核窗口时的行/列的步长,可以成倍的减少输出形状

实践代码

详情
<!-- #include-env-start: D:/code/klc/test/share4ai/docs/book/dive_into_on_dl/cnn/basic -->
```python
# 解决 jupyter notebook Kernel Restarting内核崩溃
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
# 在所有侧边填充1个像素
import torch
from torch import nn

def comp_conv2d(conv2d, X):
    X = X.reshape((1, 1) + X.shape)  # (8,8) → (1,1,8,8)
    Y = conv2d(X)                    # nn.Conv2d 要求输入格式为 (N, C, H, W): batch size,输入通道数,高和宽
    return Y.reshape(Y.shape[2:])    # 去掉 batch 和 channel 维度,返回 (H_out, W_out)

conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1) # O = (W - K + 2P) / S + 1  =(8-3+2*1)/1 +1 = 8
X = torch.rand(size=(8, 8))
comp_conv2d(conv2d, X).shape
torch.Size([8, 8])
# 填充不同的高度和宽度
conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))
comp_conv2d(conv2d, X).shape
torch.Size([8, 8])
# 将高度和宽度的步幅设置为2
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1, stride=2)
comp_conv2d(conv2d, X).shape
torch.Size([4, 4])
最近更新: 2026/3/11 20:33
Contributors: klc407073648
Prev
从全连接层到卷积
Next
多个输入和输出通道