深度学习之卷积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.总结

相关推荐
ModelWhale12 分钟前
南京中医药大学与和鲸科技签署101数智领航计划,加速“医学+人工智能”交叉学科人才培养
人工智能·科技·医学·中医药·学科建设·高等教育
GZ8manage13 分钟前
高亚科技助力优巨新材,打造高效数字化研发项目管理平台
大数据·人工智能
萌宠心语21 分钟前
智能听诊器:宠物健康管理的革命
大数据·人工智能·科技·生活·宠物
碳苯22 分钟前
【rCore OS 开源操作系统】Rust 异常处理
开发语言·人工智能·后端·rust·操作系统·os
IT修炼家33 分钟前
大模型1-本地部署实现交互问答
人工智能·深度学习·大模型·交互
大模型常客39 分钟前
产品经理内容分享(二):AI产品经理的入门路线图
人工智能·ai·大模型·aigc·产品经理·ai大模型·ai产品经理
说私域41 分钟前
开源 AI 智能名片 O2O 商城小程序源码助力企业实现三层式个性化体验
人工智能·小程序·开源
张萌20181 小时前
wsl安装pytorch
人工智能·pytorch·python
于初见月1 小时前
计算机视觉基础
计算机视觉
rubyw1 小时前
机器学习:神经网络与深度学习的原理、应用场景及优缺点
深度学习·神经网络·机器学习