深度学习之卷积CONV2D

文章目录

1.学习目的

卷积听起来简单,事实上不简单,需要多加练习

2.填充与步幅

在前面的例子 图6.2.1中,输入的高度和宽度都为3,卷积核的高度和宽度都为2,生成的输出表征的维数为22。 正如我们在 6.2节中所概括的那样,假设输入形状为nh,nw,卷积核形状为khkw,那么输出形状将是(nh-kh+1)*(nw-kw+1)。 因此,卷积的输出形状取决于输入形状和卷积核的形状。

还有什么因素会影响输出的大小呢?本节我们将介绍填充(padding)和步幅(stride)。假设以下情景: 有时,在应用了连续的卷积之后,我们最终得到的输出远小于输入大小。这是由于卷积核的宽度和高度通常大于1所导致的。比如,一个

240240像素的图像,经过10层55的卷积后,将减少到200*200像素。如此一来,原始图像的边界丢失了许多有用信息。而填充是解决此问题最有效的方法; 有时,我们可能希望大幅降低图像的宽度和高度。例如,如果我们发现原始的输入分辨率十分冗余。步幅则可以在这类情况下提供帮助。

2.1填充

如上所述,在应用多层卷积时,我们常常丢失边缘像素。 由于我们通常使用小卷积核,因此对于任何单个卷积,我们可能只会丢失几个像素。 但随着我们应用许多连续卷积层,累积丢失的像素数就多了。 解决这个问题的简单方法即为填充(padding):在输入图像的边界填充元素(通常填充元素是0

)。 例如,在 图6.3.1中,我们将33输入填充到5 5

,那么它的输出就增加为4*4。阴影部分是第一个输出元素以及用于输出计算的输入和核张量元素: 0

图6.3.1 带填充的二维互相关

python 复制代码
import torch
from torch import nn


# 为了方便起见,我们定义了一个计算卷积层的函数。
# 此函数初始化卷积层权重,并对输入和输出提高和缩减相应的维数
def comp_conv2d(conv2d, X):
    # 这里的(1,1)表示批量大小和通道数都是1
    X = X.reshape((1, 1) + X.shape)
    Y = conv2d(X)
    # 省略前两个维度:批量大小和通道
    return Y.reshape(Y.shape[2:])

# 请注意,这里每边都填充了1行或1列,因此总共添加了2行或2列
conv2d = nn.Conv2d(1, 1, kernel_size=3, padding=1)
X = torch.rand(size=(8, 8))
comp_conv2d(conv2d, X).shape

当卷积核的高度和宽度不同时,我们可以填充不同的高度和宽度,使输出和输入具有相同的高度和宽度。在如下示例中,我们使用高度为5,宽度为3的卷积核,高度和宽度两边的填充分别为2和1。

python 复制代码
conv2d = nn.Conv2d(1, 1, kernel_size=(5, 3), padding=(2, 1))
comp_conv2d(conv2d, X).shape

torch.Size(8,8)

2.2 步幅

3.总结

相关推荐
星辰AI9 小时前
告别翻译腔:用 AI Agent 自动化构建开源项目的多语言技术文档
人工智能·ai·语言模型
KJ_BioMed10 小时前
突破“不可成药”靶点:科晶生物AI互作蛋白与纳米抗体设计技术解析
人工智能·抗体药物·多肽药物·多肽设计·抗体设计
想你依然心痛10 小时前
HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“药界智脑“——PC端AI智能体沉浸式药物研发与分子模拟工作台
人工智能·华为·ar·harmonyos·智能体
CodePlayer竟然被占用了10 小时前
当编排逻辑从上下文窗口搬到脚本:Claude Code Dynamic Workflows 深度拆解
人工智能
AI视觉网奇10 小时前
3d 标注工具
人工智能·3d
莫逸风10 小时前
【AgentScope】HarnessAgent 学习指南
大数据·人工智能
武子康10 小时前
调查研究-153 Cloudflare 能部署网站吗?2026 年完整对比 Vercel / Netlify / 自建服务器
大数据·运维·服务器·人工智能·部署·devops·opc
IvanCodes10 小时前
Agent开发入门:提示词工程
人工智能·agent
麦哲思科技任甲林10 小时前
白话Skills之七:编写AI Skill的原则
人工智能·prompt·agent·ai编程·skills
weixin_3975740910 小时前
从“对接大模型“到“生成AI服务“:下一代企业AI应用开发框
人工智能