PyTorch卷积层填充(Padding)与步幅(Stride)详解及代码示例

本文通过具体代码示例讲解PyTorch中卷积操作的填充(Padding) 和**步幅(Stride)**对输出形状的影响,帮助读者掌握卷积层的参数配置技巧。


一、填充与步幅基础

  • 填充(Padding):在输入数据边缘添加指定数量的像素,用于控制输出尺寸的大小。

  • 步幅(Stride):卷积核在输入数据上每次滑动的步长,用于控制输出尺寸的缩小比例。

输出尺寸计算公式:

二、代码实现与示例

1. 全侧边填充1个像素

python 复制代码
import torch
from torch import nn

def comp_conv2d(conv2d, x):
    x = x.reshape((1, 1) + x.shape)  # 增加批次和通道维度
    y = conv2d(x)                    # 计算卷积
    return y.reshape(y.shape[2:])    # 删除批次和通道维度

# 创建卷积层:3x3卷积核,填充1像素
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1)
x = torch.rand((8, 8))               # 8x8输入矩阵
comp_conv2d(conv2d, x).shape         # 输出形状

输出结果

bash 复制代码
torch.Size([8, 8])

解析:填充1像素后,输入尺寸保持不变。


2. 非对称填充(高度和宽度不同)

python 复制代码
# 创建卷积层:5x3卷积核,高度填充2,宽度填充1
conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))
comp_conv2d(conv2d, x).shape

输出结果

bash 复制代码
torch.Size([8, 8])

3. 步幅设置为2

python 复制代码
# 创建卷积层:3x3卷积核,填充1,步幅2
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1, stride=2)
comp_conv2d(conv2d, x).shape

输出结果

bash 复制代码
torch.Size([4, 4])

4. 复杂参数组合

python 复制代码
# 创建卷积层:3x5卷积核,高度不填充,宽度填充1,步幅(3,4)
conv2d = nn.Conv2d(1, 1, kernel_size=(3, 5), padding=(0, 1), stride=(3, 4))
comp_conv2d(conv2d, x).shape

输出结果

bash 复制代码
torch.Size([2, 2])

三、总结

  1. 填充用于保持输入输出尺寸一致或调整边缘特征保留。

  2. 步幅用于降低输出尺寸,减少计算量。

  3. 通过组合不同参数,可灵活控制卷积层的输出形状。

建议读者通过修改参数自行实验,深入理解公式中的数值变化规律。

相关推荐
滴图服务-七七8 小时前
滴滴地图:精准定位赋能企业数字化转型
大数据·人工智能·地图服务·甲级测绘资质·商业授权
爱学习的程序媛8 小时前
2026上半年大模型全景技术解读:推理融合、Agent 爆发与多模态统一
人工智能·ai
A.说学逗唱的Coke9 小时前
【大模型专题】向量数据库深度解析:从原理到实战,构建企业级 AI 知识检索底座
数据库·人工智能
果丁智能10 小时前
智能锁赋能网约房民宿数字化管控:身份核验+远程授权,筑牢安全防线、降本增效
网络·数据库·人工智能·安全·智能家居
V搜xhliang024610 小时前
AI智能体的数据安全与合规实践
人工智能·学习·数据分析·自动化·ai编程
大貔貅喝啤酒10 小时前
Python Requests库教程
自动化测试·python·requests库
PPIO派欧云10 小时前
PPIO登上贵州新闻联播,深化AI算力生态建设
人工智能
hai31524754310 小时前
一种通过空间几何转换进行软件编程计算的方式与现有计算的对比
人工智能·深度学习·数学建模·硬件架构·几何学·图论·拓扑学
猿饵块10 小时前
LibreOffice---文档制作
人工智能
硅谷秋水10 小时前
HARBOR:一个面向具身智体机器人强化学习的驾驭框架
人工智能·深度学习·机器学习·机器人